簡體   English   中英

nltest輸出是否不適用於新對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM