PowerShell循环来调用磁盘清理

问题描述:

我试图循环访问域中的Windows机器列表来调用磁盘清理,但是,因为列表被返回的方式它不执行ForEach语句的名称替换。任何人都可以提供一些关于如何使这项工作的指导?PowerShell循环来调用磁盘清理

Get-ADComputer -Filter {OperatingSystem -Like "*windows*"} -Property * | Format-Table Name | foreach {Echo "psexec \\$ cleanmgr /sagerun:1"} 

我得到它的工作正是我本来想,并与特定的OU的方式。

ForEach ($COMPUTER in (Get-ADComputer -Filter * | Where-Object {$_.DistinguishedName -Like "*OU=Employee's Computers,DC=company,DC=com"} | Select-Object -ExpandProperty Name)) { .\psexec \\$COMPUTER cleanmgr /sagerun:1 } 
+0

您可以使用以下方法加速查询: 'Get-ADComputer -searchRoot“OU =员工计算机,DC =公司,DC = com“' 然后,PowerShell将不会加载AD中的所有计算机,只会加载所需的计算机。 – MicroScripter

+0

它似乎没有工作。它抱怨'-searchRoot'。 – Eroji

像这样

$computers = get-Content c:\computers.txt 
foreach ($computer in $computers){ 
if(!(Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet)) 
{write-host "cannot reach $computer" -f red} 

else {& \\$computer\C$\Windows\System32\cleanmgr.exe /sagerun:1}} 
+0

没试过与您可以检查 '$电脑= GET-ADComputer -Filter {OperatingSystem的样 “*窗口*”},物业* |格式 - 表名称“ – DisplayName

+0

这不仅仅是在您的本地计算机上运行远程'cleanmgr.exe'吗? – MicroScripter

+0

它也可以在远程计算机上运行,​​并且不需要pstools +您可以获得有关它运行在哪台计算机上的信息 – DisplayName