2016-11-29 102 views
0

我正在尝试编写一个脚本,该脚本会将当前位于“\ server \ share \%username%”中的所有用户文档移动到“\ server \ share \%username%\ Documents” 。
它还将检查文档文件夹是否存在,如果不存在,它将创建它。
将所有用户文档移动到子文件夹中

为了测试这个工作,我已经打破了脚本来测试每个部分,并用写主机替换了实际的命令,本节应该测试以查看文档文件夹是否存在。

当我运行它并检查用户家庭文件夹是黄色突出显示,一些用户有一个文件夹和一些不,但它应该只突出显示没有文件夹黄色的文件夹。

$userhomes = Get-ChildItem "D:\" | where {$_.Attributes -like '*Directory*'} 
foreach($userhome in $userhomes) { 
$exclude = "Documents" 
$movesource = "D:\" + $userhome.Name 
$movedest = "D:\"+ $userhome.Name +"\Documents" 
$autodest = "D:\"+ $userhome.Name +"\Documents"+"\Autorecovery" 
$docexists = Test-Path $movedest 
$autoexists = Test-Path $autodest 
$Search = "OU=Users,DC=domain,DC=co,DC=uk" 
$Users = Get-ADUser -Filter * -SearchBase $Search 

$users | % { 

# Check if Documents folder already exists 
If ($docexists -eq $false) 
    { 
# Create the Documents folder 
# Get-Item -path $movesource | New-Item -ItemType Directory -Path "$movesource\Documents" 
    Write-Host Documents folder does not exists for ($_.SamAccountName) -ForegroundColor Yellow 
} 
else 
{ 
    Write-Host Documents folder already exists for ($_.SamAccountName) -ForegroundColor Red 
} 
} 
} 

后的文件夹已经创建,我想创建另一个文件夹,如果该文件夹不存在的属性设置为隐藏。

# Check if Autorecovery folder already exists 
If ($autoexists -eq $false) 
{ 
    # Create the Autorecovery folder and set attributes 
    Get-Item -path $movesource | New-Item -ItemType Directory -Path "$movesource\Documents\Autorecovery" | %{$_.Attributes="hidden"} 
    Write-Host Documents and Autorecovery folder for ($_.SamAccountName) created -ForegroundColor Green 
} 
else 
{ 
Write-Host Autorecovery folder already exists for ($_.SamAccountName) -ForegroundColor Red 
} 

一旦被排序然后我要检查的文件夹路径“\\服务器\共享\%USERNAME%\ Documents”文件夹存在。
如果确实如此,我希望将所有文档从“%username%”文件夹移动到“Doc​​uments”文件夹,最后将AD主文件夹路径更改为指向新位置。

# Move Documents to new location 
If ($docexists = $true) 
{ 
Get-Childitem -path $movesource -exclude $exclude | Move-Item -Dest $movedest 

    # Set user new home folder path 
    Get-ADUser -Filter * -SearchBase $Search | Foreach-Object{ 

    $sam = $_.SamAccountName 
    Set-ADuser -Identity $_ -HomeDrive "H:" -HomeDirectory "\\server\share\$sam\Documents" 
} 
else 
{ 
Write-Host Documents folder does not exist for ($_.SamAccountName) -ForegroundColor Red 
} 
} 
} 
+1

你已经包含了很多关于你的脚本(很棒!)的细节,但还没有说明什么是不起作用的。 –

+0

对不起詹姆斯 我遇到的问题是,脚本说,用户有一个文档文件夹,当他们不,也是说用户没有一个文件夹,当他们有一个。 – lellis

回答

0

因此,我看到你列出的唯一问题是在第一部分,它应该只为用户着色,如果他们没有文档文件夹。这里的问题似乎是你的循环嵌套。您的$users循环位于您的$userhomes循环中,因此现在要为每个用户主目录设置所有变量,然后获取该域中所有用户的集合,然后遍历该集合并使用变量填充每个用户这是为$userhomes循环的那一步设置的,该循环与$users循环中正在处理的用户无关。这里的解决方案只是为了消除$users循环,只输出文件夹的名称而不是用户samaccountname,就像我下面的那样,如果他们的主驱动器的名称反映他们的帐户名称,这应该工作。如果不是的话,你总是可以根据AD中的homedirectory属性进行查找,但是需要将现有的文件名解析为网络名称。

$userhomes = Get-ChildItem "D:\" | where {$_.Attributes -like '*Directory*'} 
foreach($userhome in $userhomes) { 
$exclude = "Documents" 
$movesource = "D:\" + $userhome.Name 
$movedest = "D:\"+ $userhome.Name +"\Documents" 
$autodest = "D:\"+ $userhome.Name +"\Documents"+"\Autorecovery" 
$docexists = Test-Path $movedest 
$autoexists = Test-Path $autodest 


# Check if Documents folder already exists 
If ($docexists -eq $false) 
{ 
# Create the Documents folder 
# Get-Item -path $movesource | New-Item -ItemType Directory -Path "$movesource\Documents" 
Write-Host "Documents folder does not exists for $($userhome) -ForegroundColor Yellow" 
} 
else 
{ 
Write-Host "Documents folder already exists for $($userhome) -ForegroundColor Red" 
} 
} 

如果这些都不适用于您,您还可以循环访问用户集合并为它们计算主驱动器。你只需要将两者联系起来,你现在没有在你的嵌套循环中做什么。

0

这应该为您排序,它会检查并移动D:驱动器中的任何用户文件夹。然后通过AD并更新家庭文件夹。

$userhomes = Get-ChildItem "D:\" | where {$_.Attributes -like '*Directory*'} 
foreach($userhome in $userhomes) { 
    $movesource = "D:\" + $userhome.Name 
    $movedest = "$movesource\Documents" 
    $autodest = "$movedest\Autorecovery" 
    $exclude = "Documents" 

    # Check if Documents folder already exists 
    If (Test-Path $movedest) 
    { 
     Write-Host Documents folder already exists for ($_.SamAccountName) -ForegroundColor Red 
    } 
    else 
    { 
     # Create the Documents folder 
     # New-Item -ItemType Directory -Path $movedest 
     Write-Host Documents folder does not exists for ($_.SamAccountName) -ForegroundColor Yellow 
    } 

    # Check if Autorecovery folder already exists 
    If (Test-Path $autodest) 
    { 
    Write-Host Autorecovery folder already exists for ($_.SamAccountName) -ForegroundColor Red 
    } 
    else 
    { 
     # Create the Autorecovery folder and set attributes 
     New-Item -ItemType Directory -Path $autodest | %{$_.Attributes="hidden"} 
     Write-Host Documents and Autorecovery folder for ($_.SamAccountName) created -ForegroundColor Green 
    } 

    # Move Documents to new location 
    if (Test-Path $movedest) 
    { 
     Get-Childitem -path $movesource -exclude $exclude | Move-Item -Dest $movedest 
    } 
    else 
    { 
    Write-Host Documents folder does not exist for ($_.SamAccountName) -ForegroundColor Red 
    } 
} 

# Set user new home folder path 
Get-ADUser -Filter * -SearchBase $Search | Foreach-Object{ 
    $sam = $_.SamAccountName 
    Set-ADuser -Identity $_ -HomeDrive "H:" -HomeDirectory "\\server\share\$sam\Documents" 
} 
+0

感谢您的推荐,这些可能会起作用,但是我遇到的问题是写主机中的($ _。SamAccountName)无法输入。 所以写主机输出说“文件夹已存在”,所以没有帐户名我无法检查结果。 – lellis

+0

试试这个:'Write-Host“Documents文件夹已经存在$($ _。SamAccountName)”-ForegroundColor Red' –

0

我只想对所有的帮助表示非常感谢,这里是我完成的脚本。 在任何阶段它都会告诉我发生了什么事情,以及是否有任何问题。

$userhomes = Get-ChildItem "D:\" | where {$_.Attributes -like '*Directory*'} 
foreach($userhome in $userhomes) { 
$exclude = "Documents" 
$movesource = "D:\" + $userhome.Name 
$movedest = "D:\"+ $userhome.Name +"\Documents" 
$autodest = "D:\"+ $userhome.Name +"\Documents"+"\Autorecovery" 
$testpath = "D:\"+ $userhome.Name +"\Desktop" 
$Search = "OU=Users,DC=domain,DC=co,DC=uk" 
$Users = Get-ADUser -Filter * -SearchBase $Search 

# Test if Documents folder exists, create folder if it doesnt exist 
If (Test-Path $movedest) 
{ 
Write-Host Documents folder exists for $($userhome) 

# Test if Autorecovery folder exists, create folder if it doesnt exist 
If (Test-Path $autodest) 
{ 
Write-Host Autorecovery folder exist for $($userhome) 

    # Move Documents to new location 
    If (Test-Path $testpath) 
    { 
    Get-Childitem -path $movesource -exclude $exclude | Move-Item -Dest $movedest 
    Get-ChildItem -Path $movesource -Exclude "Documents" | ? {$_.PSIsContainer} |Remove-Item -Recurse -force 
    Write-Host Documents being moved for $($userhome) -ForegroundColor Yellow 


    } 
    else 
    { 
    Write-Host Documents already moved for $($userhome) 
    } 

}  
else 
{ 
# Create the Autorecovery folder and set hidden attribute 
Get-Item -path $movesource | New-Item -ItemType Directory -Path "$movesource\Documents\Autorecovery" | %{$_.Attributes="hidden"} 
Write-Host Autorecovery folder being created for $($userhome) -ForegroundColor Green 

    # Move Documents to new location 
    If (Test-Path $testpath) 
    { 
    Get-Childitem -path $movesource -exclude $exclude | Move-Item -Dest $movedest 
    Get-ChildItem -Path $movesource -Exclude "Documents" | ? {$_.PSIsContainer} |Remove-Item -Recurse -force 
    Write-Host Documents being moved for $($userhome) -ForegroundColor Yellow 


    } 
    else 
    { 
    Write-Host Documents already moved for $($userhome) 
    } 

} 

} 
else 
{ 
# Create the Documents folder 
Get-Item -path $movesource | New-Item -ItemType Directory -Path "$movesource\Documents" 
Write-Host Documents folder being created for $($userhome) -ForegroundColor Green 

# Check that Documents folder now exists 
If (Test-Path $movedest) 
{ 
Write-Host Documents folder now exists for $($userhome) -ForegroundColor Magenta 
Get-Item -path $movesource | New-Item -ItemType Directory -Path "$movesource\Documents\Autorecovery" | %{$_.Attributes="hidden"} 

    # Test if Autorecovery folder now exists 
    If (Test-Path $autodest) 
    { 
    Write-Host Autorecovery folder Created for $($userhome) -ForegroundColor Green 

     # Move Documents to new location 
     If (Test-Path $testpath) 
     { 
     Get-Childitem -path $movesource -exclude $exclude | Move-Item -Dest $movedest 
     Get-ChildItem -Path $movesource -Exclude "Documents" | ? {$_.PSIsContainer} |Remove-Item -Recurse -force 
     Write-Host Documents being moved for $($userhome) -ForegroundColor Yellow 


     } 
     else 
     { 
     Write-Host Documents already moved for $($userhome) 
     } 

    } 
    else 
    { 
    # Create the Autorecovery folder and set hidden attribute 
    Get-Item -path $movesource | New-Item -ItemType Directory -Path "$movesource\Documents\Autorecovery" | %{$_.Attributes="hidden"} 
    Write-Host Autorecovery folder being created for $($userhome) -ForegroundColor Green 

     # Check if Autorecovery folder exists 
     If (Test-Path $autodest) 
     { 
     Write-Host Autorecovery folder now exists for $($userhome) -ForegroundColor Magenta 

      # Move Documents to new location 
      If (Test-Path $testpath) 
      { 
      Get-Childitem -path $movesource -exclude $exclude | Move-Item -Dest $movedest 
      Get-ChildItem -Path $movesource -Exclude "Documents" | ? {$_.PSIsContainer} |Remove-Item -Recurse -force 
      Write-Host Documents being moved for $($userhome) -ForegroundColor Yellow 


      } 
      else 
      { 
      Write-Host Documents already moved for $($userhome) 
      } 
     } 
     else 
     { 
     Write-Host ERROR Autorecovery folder still does not exist for $($userhome) -ForegroundColor Red 
     } 

    } 
} 
else 
{ 
Write-Host ERROR Documents folder still does not exist for $($userhome) -ForegroundColor Red 
} 
} 
} 
相关问题