我正在多个服务器的驱动器中搜索特定文件。代码看起来像这样......
$servers = Get-ADComputer -filter {Name -like "SERVER-*"}
foreach ($server in $Servers){
$Server.Name
Invoke-Command -ComputerName $server.Name -ScriptBlock {
$filename="db2cmd.exe"
$listOfDrives=(get-psdrive | ? { $_.provider -match 'FileSystem'}).root
foreach ($Drive in $listOfDrives){
If ($Drive -ne "C:\" -and $Drive -ne "A:\") {
Get-ChildItem -Path $Drive -Filter $filename -Recurse -ErrorAction SilentlyContinue -Force
}
}
}
}
当我运行它时,在大多数情况下,当遇到该文件时,它会返回找到该文件的目录..
Directory: E:\IBM\DB2\SQLLIB\BIN
Mode LastWriteTime Length Name PSComputerName
---- ------------- ------ ---- --------------
-a---- 1/5/2024 11:32 AM 55888 db2cmd.exe ServerA
然而,在其他服务器上,既不显示目录,也不显示列标题。
-a---- 1/5/2024 11:32 AM 55888 db2cmd.exe ServerB
我真的不明白这样做的原因,因为它在每台服务器上运行相同的命令。如果您能提供任何帮助,我们将不胜感激。
我尝试了不同的参数,但它们似乎改变了 Get-ChildItems 正在寻找的位置和内容,而不是结果的输出方式。
$servers = Get-ADComputer -filter {Name -like "SERVER-*"}
foreach ($server in $Servers){
$Server.Name
Invoke-Command -ComputerName $server.Name -ScriptBlock {
$filename="db2cmd.exe"
$listOfDrives=(get-psdrive | ? { $_.provider -match 'FileSystem'}).root
foreach ($Drive in $listOfDrives){
If ($Drive -ne "C:\" -and $Drive -ne "A:\") {
Get-ChildItem -Path $Drive -Filter $filename -Recurse -ErrorAction SilentlyContinue -Force
}
}
}
}