powershell - 根据上次修改复制特定用户文件夹

时间:2015-03-03 19:24:02

标签: powershell

我需要为过去30天内登录到PC的每位用户复制Documents,Favorites和Desktop文件夹。

我刚刚开始学习powershell,我认为我有一个不错的开始,但我浪费了太多时间。这是一个工作项目,我发现自己只是挖掘X问题的解决方案,只是为了在下一轮遇到另一个问题。花了大约一个月的时间试图解决这个问题,并抛弃了很多代码。

我现在所拥有的是:

Get-ChildItem -path c:\users |Where-Object  { $_.lastwritetime -gt (get-date).AddDays(-30)}

我知道这行会返回我需要的用户文件夹。此时,我需要从上面进入每个子项目的代码,并拉出Documents,Favorites和Desktop文件夹。

现在是棘手的部分。我需要代码在c:上创建一个文件夹,用户名从中提取这些文件夹。

所以解决方案应该:

为过去30天内登录的每位用户; 从用户驱动器复制文档,收藏夹,桌面文件夹 在c:\上为该用户名创建一个文件夹 将文档,收藏夹,桌面粘贴到该文件夹​​

更好地涵盖范围:

我必须在我的部门重新制作PC。 “清点”PC的过程是复制这些文件夹并将其替换为用户的新PC I图像。这样他们的桌面等看起来一样,并且当他们得到他们的新PC时功能相同。这段代码将成为一个更大的代码的一部分,最终为我“清点”整个PC ...最终,我希望能够运行我的脚本2秒钟,然后将X文件夹和X文档从c:驱动器上拉下来与过去30天内使用过PC的9位用户点击,点击,点击,点击一百次相反。

有什么想法吗?

2dubs

2 个答案:

答案 0 :(得分:0)

$usersFoldr =  Get-ChildItem -path c:\users | Where-Object  {   $_.lastwritetime -gt (get-date).AddDays(-30)}

foreach ($f in $usersFoldr){
  $toFld = "c:usrTest\" + $f.Name +"\Desktop\"
  New-Item  $toFld -type directory -force
  Get-ChildItem ($f.FullName + "\Desktop") | Copy-Item -destination $toFld -Recurse -Force
 }

答案 1 :(得分:0)

Thanks to @bagger for his contribution. He was close.

经过一些实验,我发现这是实际的解决方案:

 $usersFoldr = Get-ChildItem -path c:\users | Where-Object  {   
$_.lastwritetime -gt (get-date).AddDays(-30)}
foreach ($f in $usersFoldr)
{

$doc = "c:\users\$f\documents"
  $toFldDoc = "c:\$f\documents"
  New-Item  $doc -type directory -force
  Copy-Item $doc $toFldDoc -recurse -Force 
  }

foreach ($f in $usersFoldr){
  $desk = "c:\users\$f\desktop"
  $toFldDesk = "c:\$f\desktop"
  New-Item  $desk -type directory -force
  Copy-Item $desk $toFldDesk -recurse -Force 
  }

foreach ($f in $usersFoldr){

$fav = "c:\users\$f\favorites"
 $toFldFav = "c:\$f\favorites"
 New-Item  $fav -type directory -force
  Copy-Item $fav $toFldFav -recurse -Force 
  }

然后保存此文件,将其快捷方式发送到桌面,然后将快捷方式的目标更改为:

C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -f" C:\ YOURDIRECTORY \ YOURSCRIPTNAME.ps1"

然后以管理员身份运行该快捷方式。像黄金一样工作。

谢谢你的帮助,伙计们! :)

对于对整个剧本感兴趣的任何人: 清单脚本,用于在过去30天内复制所有用户的相关文件,收集打印机主机名/驱动程序/ IP,收集序列号,收集品牌/型号。

$usersFoldr = Get-ChildItem -path c:\users | Where-Object  {   
$_.lastwritetime -gt (get-date).AddDays(-30)}

foreach ($f in $usersFoldr){
  $doc = "c:\users\$f\documents"
  $toFldDoc = "c:\inventory\$f\documents"
  New-Item  $doc -type directory -force
  Copy-Item $doc $toFldDoc -recurse -Force 

    }

  foreach ($f in $usersFoldr){
   $desk = "c:\users\$f\desktop"
   $toFldDesk = "c:\inventory\$f\desktop"
   New-Item  $desk -type directory -force
   Copy-Item $desk $toFldDesk -recurse -Force 

    }

  foreach ($f in $usersFoldr){
   $fav = "c:\users\$f\favorites"
   $toFldFav = "c:\inventory\$f\favorites"
   New-Item  $fav -type directory -force
   Copy-Item $fav $toFldFav -recurse -Force 

    }

Get-WMIObject -class Win32_Printer | Select Name,DriverName,PortName 
|Export-CSV -path 'C:\Inventory\printers.csv'

Get-WmiObject win32_bios |foreach-object {$_.serialnumber} |out-file 
'c:\Inventory\SerialNumber.txt'

Get-WmiObject Win32_ComputerSystem | Select Model,Manufacturer |out-file 
'c:\Inventory\MakeModel.txt'

再次保存此文件,将其快捷方式发送到桌面,然后将快捷方式的目标更改为:

C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -f" C:\ YOURDIRECTORY \ YOURSCRIPTNAME.ps1"

您还可以通过在脚本中添加以下行来检索已安装软件的列表:

get-wmiobject win32_product | select Name |export-csv -path 'c:\inventory
\software.csv'