Powershell nltest输出是否无效,无法与新对象一起使用?
运行nltest命令“nltest/dsgetdc:contoso.com”时,我得到以下输出: DC:\DC1.contoso.comPowershell nltest输出是否无效,无法与新对象一起使用?,powershell,active-directory,Powershell,Active Directory,运行nltest命令“nltest/dsgetdc:contoso.com”时,我得到以下输出: DC:\DC1.contoso.com 地址:\192.168.0.100 Dom Guid:1234567a-abc1-4d66-a421-153f0116d8c7 Dom名称:contoso.com 林名称:contoso.com DC站点名称:纽约 我们的网站名称:纽约 标志:PDC GC DS LDAP KDC TIMESERV…等 我要做的是捕获DC的输出,最终捕获地址字段。我尝试了以下方
地址:\192.168.0.100
Dom Guid:1234567a-abc1-4d66-a421-153f0116d8c7
Dom名称:contoso.com
林名称:contoso.com
DC站点名称:纽约
我们的网站名称:纽约
标志:PDC GC DS LDAP KDC TIMESERV…等 我要做的是捕获DC的输出,最终捕获地址字段。我尝试了以下方法,但它似乎不喜欢:
$svc=nltest /dsgetdc:contoso.com
$obj=new-object psobject -property {DC=$svc.DC}
新对象:无法绑定参数“属性”。无法转换
DC=$svc.DC“System.Management.Automation.ScriptBlock”类型的值
键入“System.Collections.IDictionary”。第1行字符:36
+$obj=新对象psobject-属性{DC=$svc.DC}
+ ~~~~~~~~~~~~
+CategoryInfo:InvalidArgument:(:)[New Object],ParameterBindingException
+FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.NewObjectCommand
很明显,我打错了电话/使用的命令不正确。我甚至应该使用新对象来完成我的工作吗?恐怕您没有正确地使用它(不完全正确)
newobject-Property
需要一个[hashtable]
。您正在传递它,它表示一个[scriptblock]
。您需要使用@{}
来指示散列
但是,该命令的输出只是一个带换行符的字符串,您不能直接将其放入@{}
中以生成哈希表
这里有一些代码可以帮你做到这一点:
$svc=nltest/dsgetdc:contoso.com
$h=@{}
$svc-分割'\r?\n'|每个对象{
如果($匹配'^(?[^:]+):\s+(?。+)$){
$h[$Matches['key']=$Matches['value']
}
}
$obj=新对象PSObject-属性$h
我们根据换行符拆分输出,然后对每一行进行正则表达式匹配,取出键和值,并将其添加到哈希中,然后在调用
新对象时使用它,Briantist给出了一个很好的答案,详细说明了如何处理nltest
的输出。由于nltest
的输出已经使用name:value进行了良好的格式化,因此我建议使用
$results=((nltest/dsgetdc:contoso.com)-replace:“,”=”|
其中对象{$\匹配“=”})-连接“`r`n”|
从StringData转换
新对象-TypeName PSCustomObject-属性$results
我们使用-replace:“,“=”
将所有冒号转换为等号。然后我们过滤掉那些没有等号的线。即删除任何状态消息,如“命令已成功完成”ConvertFrom StringData
需要一个字符串,因此我们用新行连接这些行以生成单个字符串convertfromstringdata
生成一个哈希表,存储在$results
中
然后,就像您的问题和,我们制作一个PsCustomObject
。输出如下所示
Dc Site Name : CON
Our Site Name : CON
DC : \DCCONTOSO.COM
Flags : GC DS LDAP KDC TIMESERV WRITABLE DNS_DC DNS_DOMAIN DNS_FOREST CLOSE_SITE FULL_SECRET WS
Address : \1254.885.1.478
Dom Name : CONTOSO.COM
Dom Guid : 0a3be324-f399-4b44-a3f1-b9c5aa6e7c5b
Forest Name : CONTOSO.COM
只需将对象创建的结果保存到变量中,就可以像访问PowerShell中的任何对象一样访问属性。非常酷,+1。我没有意识到从StringData转换而来的实际上是存在的。我把它和PowerShell 5.0中的ConvertFrom字符串
搞混了(希望你不介意,我编辑了你的答案,因为它有几个后者的实例)。@briantist不,完全可以。我的回答误导了其他人。非常感谢。对于我来说,这是一个学习的日子。干杯