我需要为过去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
答案 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'