how to loop through all user directories on file server??

This topic contains 0 replies, has 1 voice, and was last updated by Profile photo of Forums Archives Forums Archives 5 years, 4 months ago.

  • Author
    Posts
  • #5579

    by tommls at 2013-02-22 10:06:05

    All our users have directories in //fp/users, where each directory is //fp1/users/%username%/
    I know how to test if they have a Favorites directory, if true cd/move to that folder, create folder 'Saved', copy all contents of Favorites to Saved
    What I don't understand is how to loop through the directories, how do I do this??


    for each directory (%username%) in //fp1/users
    if Favorites folder exists
    cd to Favorites I know how to do this
    create new folder 'Saved" I know how to do this
    copy all contents to Saved I think I can figure this out
    must I now CD back up to ///fp1/users after doing the copy??
    next
    else continue?? (no Favorites folder exists)

    or should it be if not Favorites exist continue otherwise assume it exists and CD to it etc.??
    What I don't understand is how to go through directories where the %username% is different...

    Thank you, Tom

    by tommls at 2013-02-22 10:42:39

    this starts toward what I want:

    cls
    #Get User Folder names into variable for ForEach Loop
    $UserFolders = get-childitem -path "\\fp1\users" | where-object {$_.Psiscontainer -eq "True"} |select-object name
    #Loop through folders in Directory
    foreach ($UserFolder in $UserFolders)
    {
    If(-Not(Test-Path "\\$UserFolder\Favorites")) { # if true exit for loop, go to next folder
    Continue
    }
    Set-Location "\\$UserFolder\Favorites" -ErrorAction SilentlyContinue # if exists move to Favorites
    if (-not (Test-Path "Saved")) {
    New-Item -Path "Saved" -ItemType "Directory" -ErrorAction SilentlyContinue
    }
    copy \\$UserFolder\Favorites\*.* \\$UserFolder\Favorites\Saved
    }

    will this work??
    thank you, tom

    by tommls at 2013-02-22 11:13:27

    Result looks right, I can sort of figure out how to do the reverse to restore favorites.

    Having little experience with what is or is not a correct -Whatif output, this APPEARS to appropriately create the Saved directory and copy over the files...
    What if: Performing operation "Copy Directory" on Target "Item: \\fp1\users\vnephew\Favorites Destination: \\fp1\users\vnephew\Favorites\Saved".

    However it does not work if the Saved folder already exists, how do I fix this??
    I'll need to run the script multiple times...
    That is why I wrote the script the way I did, I had other code which tests for directory existence...

    Thank you...

    by poshoholic at 2013-02-22 11:24:09

    I have a recommendation. You are copying the contents of a folder into a subfolder that is under that folder. Is the location of the subfolder (under the folder you are copying) an absolute requirement? Because if not I would recommend you copy it to a sibling folder instead. For example, copy Favorites to SavedFavorites as a sibling in the user profile folder. That makes the script much simpler (the recursive copy into a subfolder is a little more complicated due to limits/bugs in PowerShell). If using a sibling folder instead is fine, then you could do this:
    Get-ChildItem -Path \\fp1\users\*\Favorites | Copy-Item -Force -Destination {"$($_.PSParentPath)\SavedFavorites"} -Recurse -WhatIf
    Similarly, copying the saved favorites back would be this:
    Get-ChildItem -Path \\fp1\users\*\SavedFavorites | Copy-Item -Force -Destination {"$($_.PSParentPath)\Favorites"} -Recurse -WhatIf
    And that removes the mistake I made which would only work when the script was run the first time (this works every time).

    by tommls at 2013-02-22 11:34:23

    In testing in the first run, the above code created a subfolder, SavedFavorites, within Favorites.
    Then on the 2nd run, I got this:
    Copy-Item : Cannot copy item \\fp1\users\vnephew\Favorites\SavedFavorites onto itself.
    Plus I discovered some people have a 'Favorites Bar' FOLDER inside 'Favorites,' which also must be copied to SavedFavorites if it exists.
    Thank you, Tom

    by poshoholic at 2013-02-22 12:38:02

    Ok, I'm still scratching my head on why the last one is doing that. It doesn't make sense, but it's Friday, and it's been a long week, so I'll have to leave it as not making sense to me for now.

    This one should work better:
    Get-Item -Path \\fp1\users\*\Favorites | ForEach-Object {
    $parentPath = $_.PSParentPath
    $_ | Get-ChildItem -Force | Copy-Item -Force -Destination "${parentPath}\SavedFavorites" -Recurse -WhatIf
    }

    That should copy over both files and folders, even if they are hidden.

    by tommls at 2013-02-22 12:40:49

    Thank you for your new suggestion...
    Testing the new script displays proper What-If results but when the What-If is removed, *nothing* happens!! 🙁
    No error messages either, I will keep working on this and also try/test my own trial script and try to remember to update this thread...
    Thank you for helping me, Tom

    by poshoholic at 2013-02-22 13:02:56

    Wait, so when -WhatIf is removed, this version doesn't copy the Favorites folder and its contents as a SavedFavorites sibling folder (at the same level, right next to it)? This works fine when I run it locally. It doesn't output anything, but it works.

    by tommls at 2013-02-22 13:15:39

    Pllease remember that since today is Friday, ghosts are in the machines. 🙂

    After RDP'ing in again and trying again, I do get a resulting sib folder...the script does work. 🙂

    The Favorites Bar folder within the user's Favorites folder was saved within SavedFavorites as Links.
    Do you know why that happens??
    If you don't I'm not gonna worry bout it 🙂

    Thank you, Tom

    by poshoholic at 2013-02-22 13:22:25

    I thought the favorites bar folder was actually called Links, and that "Favorites Bar" was just the name according to Internet Explorer or other web browsers.

    by tommls at 2013-02-22 13:24:59

    OIC makes sense, thank you for explaining...
    Thank you, Tom

You must be logged in to reply to this topic.