我正在尝试找出如何通过 PowerShell 针对计算机列表创建测试路径并为每台计算机接收“false”或“true”。
例如,做这样的事情:
$Computer = "OU=wsus,DC=server,DC=Com"
Test-Path -Path "\$Computer\C$\Program Files\your app"
结果:
computer1 = false computer2 = true computer3...
这可能吗?或者有更好的方法吗?谢谢你的帮助。
答案1
使用带有 LDAP OU 路径的参数,仅列出Get-ADComputer
返回对象的属性。将这些结果通过管道传输到循环,然后测试计算机是否可以远程访问,并运行其他逻辑以根据计算机输出相应的结果。-SearchBase
Name
ForEach-Object
基本上,条件逻辑的工作方式如下:
- 如果机器无法远程访问查询,则使用条件
If
向终端写入黄色消息,表明无法访问的特定机器存在连接问题。 - 如果机器可以远程访问查询,但文件夹或可执行文件的路径不存在,则向终端写入红色消息,表示该应用程序不存在。
- 如果机器可以远程访问查询,并且文件夹或可执行文件的路径确实存在,则向终端写入一条绿色消息,表明该应用程序确实存在。
笔记:我个人更喜欢检查实际的 exe 而不是仅仅检查文件夹,因为我看到过一些软件卸载并留下一个文件夹,即使软件已被卸载 - 请相应地进行调整。
电源外壳
(Get-ADComputer -Filter * -SearchBase "OU=wsus,DC=server,DC=Com").Name | ForEach-Object {
If (Test-Connection -ComputerName $_ -Quiet -Count 1) {
$app = "\\$_\C$\Program Files\your app\App.exe";
If (Test-Path $app){Write-Host "The App does exist ==> $_" -ForegroundColor Green} Else {Write-Host "No App Exists ==> $_" -ForegroundColor Red};
} Else {Write-Host "Not accessible to check ==> $_" -ForegroundColor Yellow}
};
输出示例
No App Exists ==> PC0001
No App Exists ==> PC0002
Not accessible to check ==> PC0003
Not accessible to check ==> PC0004
The App does exist ==> PC0005
The App does exist ==> PC0006
The App does exist ==> PC0007
The App does exist ==> PC0008
支持资源
答案2
你是这个意思吗?
'127.0.0.1', 'localhost', $env:COMPUTERNAME |
ForEach {
Try {Test-Path -Path "\\$PSItem\C$\Windows" -PathType Container -ErrorAction Stop}
Catch {$Error[0].Exception}
}
# Results
<#
True
True
True
#>
'127.0.0.1', 'localhost', $env:COMPUTERNAME |
ForEach {
Try {Test-Path -Path "\\$PSItem\C$\Test" -PathType Container -ErrorAction Stop}
Catch {$Error[0].Exception}
}
# Results
<#
False
False
False
#>