powershell - Powershell - 在 for 循环中使用调用命令
问题描述
当我尝试为 Active-Directory 中的每台计算机运行调用命令时,我将遇到以下错误:“调用命令:一个或多个计算机名称无效。如果您尝试传递 URI,请使用 -ConnectionUri参数,或传递 URI 对象而不是字符串。"
```
$Hosts_Array=Get-ADComputer -Properties CN -Filter * | Sort-Object | Select-Object CN
foreach ($i in $Hosts_Array) {
Invoke-Command -ComputerName $i -ScriptBlock { Get-Service -Name "sysmon64"}
}
```
我使用 For 循环为从 AD 获取的每台计算机运行命令。
解决方案
正如所评论的,Select-Object
返回objects,在这种情况下,对象只有一个名为“CN”的属性。
实际上,您根本不需要询问 CN,因为Get-ADComputer
默认返回这些属性:
DistinguishedName, DNSHostName, Enabled, Name, ObjectClass, ObjectGUID, SamAccountName, SID, UserPrincipalName
您可以通过执行以下操作来简化代码:
$Hosts_Array = (Get-ADComputer -Filter *).Name | Sort-Object
foreach ($computer in $Hosts_Array) {
Invoke-Command -ComputerName $computer -ScriptBlock { Get-Service -Name "sysmon64" }
}
(Get-ADComputer -Filter *).Name
返回仅包含计算机名称的字符串数组,也可以使用Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
PS我已将变量名称更改为使用from $i
(通常在编号循环中使用)进行迭代$computer
以使其更清晰
AD 中的每个对象都有一个Relative Distinguished Name
(RDN)。这是对象在其父 OU/Container 中的名称。对于用户、组、计算机和容器对象,RDN 是cn
属性(通用名称)的值。对于 OU 对象,RDN 是ou
属性的值。对于域组件对象,它是dc
属性。
该Name
属性返回任何对象的 RDN。
推荐阅读
- synchronization - 如何让多个 FreeRTOS 任务相互等待完成初始化
- tensorflow - Tensorflow:用最小值或最大值替换张量中的所有值
- javascript - Vuetify.js Datepicker - 提供允许日期的数组?
- c++ - 将大int转换为float而不四舍五入c ++
- c# - 如何从 WPF 中的另一个类访问字符串
- python - 无法使用 PyCharm 导入模块,为什么?
- c# - Bot 可以从用户接收图像作为消息或附件吗
- php - PHP - 在 laravel 中自动计算时间间隔
- javascript - Cloud9 - MySQL 日期时间格式
- java - 未找到测试用例:类 java.lang.Object 中未找到构造函数对象(java.lang.String)