运行 nltest 命令“nltest/dsgetdc:contoso.com”时,我得到以下输出:
DC:\DC1.contoso.com
地址:\192.168.0.100
多姆指南:1234567a-abc1-4d66-a421-153f0116d8c7
域名: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}
New-Object : Cannot bind parameter 'Property'. Cannot convert the "DC=$svc.DC" value of type "System.Management.Automation.ScriptBlock" to type "System.Collections.IDictionary". At line:1 char:36 + $obj=new-object psobject -property {DC=$svc.DC} + ~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-Object], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.NewObjectCommand
很明显,我错误地调用了电话/错误地使用了命令。我是否应该使用 new-object 来完成我想做的事情?
最佳答案
Briantist 有一个很好的答案,详细说明了如何处理 nltest
输出的问题。由于 nltest
的输出已经使用 name:value 进行了良好的格式化,我建议使用 ConvertFrom-StringData
。
$results = ((nltest /dsgetdc:contoso.com) -replace ":","=" |
Where-Object{$_ -match "="}) -join "`r`n" |
ConvertFrom-StringData
new-object -TypeName PSCustomObject -Property $results
我们使用 -replace ":","="
将所有冒号转换为等号。然后我们过滤掉 和 没有等号的行。即删除任何状态消息,例如“命令成功完成”。 ConvertFrom-StringData
需要一个字符串,因此我们将各行与新行连接起来以形成该单个字符串。 ConvertFrom-StringData
创建一个哈希表,并将其存储在 $results
中。
然后,就像你的问题和 briantists answer ,我们创建一个 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 中访问任何对象一样访问属性。
关于powershell - nltest 输出对于与 new-object 一起使用无效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978307/