[英]Is nltest output not valid to use with new-object?
運行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的輸出,並最終捕獲Address字段。 我嘗試了以下操作,但似乎不喜歡它:
$svc=nltest /dsgetdc:contoso.com
$obj=new-object psobject -property {DC=$svc.DC}
新對象:無法綁定參數“屬性”。 無法將類型“ System.Management.Automation.ScriptBlock”的“ DC = $ svc.DC”值轉換為類型“ System.Collections.IDictionary”。 在第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的回答一樣 ,我們制作了一個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中的任何對象一樣訪問屬性。
恐怕您沒有正確使用它(不太正確)。
New-Object -Property
需要一個[hashtable]
。 您要傳遞{}
來表示[scriptblock]
。 您將需要使用@{}
來表示哈希。
但是,該命令的輸出只是帶有換行符的字符串,您不能僅將其直接放入@{}
以創建哈希表。
因此,這里有一些代碼可以為您做到這一點:
$svc=nltest /dsgetdc:contoso.com
$h = @{}
$svc -split '\r?\n' | ForEach-Object {
if ($_ -match '^(?<key>[^:]+):\s+(?<value>.+)$') {
$h[$Matches['key']] = $Matches['value']
}
}
$obj = New-Object PSObject -Property $h
我們將基於換行符拆分輸出,然后針對每行進行正則表達式匹配,並提取鍵和值,並將其添加到哈希中,然后在對New-Object
的調用中使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.