要求进行代码审查:PowerShell 对本地 PC 而不是 $inventory 中所需的远程 PC 执行多次

Posted

技术标签:

【中文标题】要求进行代码审查:PowerShell 对本地 PC 而不是 $inventory 中所需的远程 PC 执行多次【英文标题】:Code review requested: PowerShell executing multiple times against local PC instead of the desired remote PCs in $inventory 【发布时间】:2020-05-14 20:11:15 【问题描述】:

Stack Overflow 社区——您好!长期聆听者,第一次来电者。另外,这是我第一次涉足脚本领域,所以不要把我打得太惨!

我拼凑了一个测试脚本(来自多个网站),我试图用它来识别一些 USB 设备。它目前正在我本地网络上的 4 台机器上进行测试,但最终会达到数千台。

长话短说,我的 PS 脚本在运行时似乎没有使用我的 $inventory 变量,而是在我的本地 PC 上运行该脚本的次数与我有条目的次数相同在变量中,并输出相同(在这种情况下为四次)。当然,我忽略了一些简单的事情,但是阅读相同的文章数小时并没有让我到任何地方。我愿意接受任何建议!

$inventory = "pc1","pc2","pc3","pc4"
$target = "*usb*"

ForEach ($i in $inventory) 
Get-WmiObject win32_usbcontrollerdevice |%[wmi]($_.Dependent) | Where-Object ($_.Service -like $target) | Sort SystemName,Manufacturer,Description,DeviceID | ft SystemName,Manufacturer,Description,DeviceID -auto 

输出(请注意,下面列出的 MyLocalPC应该是上面列出的四台远程 PC):

系统名称制造商说明 设备ID ---------- ------------ ----------- --------MyLocalPC(通用 USB 音频)USB 音频设备 USB\VID_046D&PID_0A44&MI_00\7&73B6162&0&0000 (...为简洁起见缩短输出...)

系统名称制造商说明 设备ID ---------- ------------ ----------- --------MyLocalPC(通用 USB 音频)USB 音频设备 USB\VID_046D&PID_0A44&MI_00\7&73B6162&0&0000 (...为简洁起见缩短输出...)

系统名称制造商说明 设备ID ---------- ------------ ----------- --------MyLocalPC(通用 USB 音频)USB 音频设备 USB\VID_046D&PID_0A44&MI_00\7&73B6162&0&0000 (...为简洁起见缩短输出...)

系统名称制造商说明 设备ID ---------- ------------ ----------- --------MyLocalPC(通用 USB 音频)USB 音频设备 USB\VID_046D&PID_0A44&MI_00\7&73B6162&0&0000 (...为简洁起见缩短输出...)

另一条可能很重要的信息(?)——如果我写出 $i 的输出,它似乎是正确的:

PS C:\Users\me\Desktop> $inventory = "pc1","pc2","pc3","pc4"
$target = "*usb*"

ForEach ($i in $inventory) Write-Output $i
pc1
pc2
pc3
pc4

【问题讨论】:

【参考方案1】:

这是因为您只是根据 $inventory 中的项目数量运行相同的代码。您实际上并没有在任何地方输入计算机名称。

在当前项目中添加-ComputerName 参数,它应该可以按预期工作:

ForEach ($computer in $inventory) 
  Get-WmiObject win32_usbcontrollerdevice -ComputerName $computer | # pipe to other stuff

【讨论】:

谢谢!虽然这个确实现在针对正确的机器,但它似乎仍然运行脚本总共 4 次——等于我在列表中的设备数量。例如,如果我添加一台 PC,它总共会输出 5 次。我不认为这是正常的,但我也不知道更好。应该休息一下吗?我是否无意中告诉我的脚本在某处表现得像这样? 我不确定我的干预或周末重启电脑是否解决了奇怪的行为,但现在一切都很好。感谢您的帮助!

以上是关于要求进行代码审查:PowerShell 对本地 PC 而不是 $inventory 中所需的远程 PC 执行多次的主要内容,如果未能解决你的问题,请参考以下文章

如何获得代码审查任务的所有权?

ado连接远程oracle数据库 对本地电脑有啥要求

使用merge 对本地分支进行合并 并进行代码提交的流程

在反应中对本地快递服务器进行邮政呼叫

如何使用 swift 对本地玩家进行身份验证?

Git重置不对本地或远程进行任何更改