Active-Directory

如何在不進行類型轉換和拆分的情況下直接使用 powershell 對象屬性?

  • September 16, 2017

我創建了一個小腳本來將名為 pssfulllocation 的 Active Directory pc 屬性的值從一台 pc 傳輸到另一台 pc。

為了實現這一點,我必須使用類型轉換+拆分..

這是有效的腳本

$oldpc=read-host "Enter old pc name"
$newpc=read-host "Enter new pc name"
$my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation 

 $itemcast=[string]$my
 $b = $itemcast.Split("=")[1]    
 $c=$b.Split("}")[0]

Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$c"}

並且輸出將很好地完成預期的工作..以這種方式..這是預期的結果..

在此處輸入圖像描述

但是,如果我不按照以下腳本使用類型轉換+拆分-

$oldpc=read-host "Enter old pc name"
$newpc=read-host "Enter new pc name"
$my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation 
Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$my"}

輸出在下面..這不是我想要的..

在此處輸入圖像描述

簡而言之,如果我不使用類型轉換 + 拆分輸出將添加為 @{pSSFullLocation=C/BRU/B/0/ADM/1 但它只能添加為 C/BRU/B/0/ADM/1按照這個:

在此處輸入圖像描述

我覺得類型轉換 + 拆分應該是一種解決方法,而不是正確的方法。. 任何其他 powershell 方法可以在不使用類型轉換 + 拆分的情況下實現這一目標?

不要這樣做:

$my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation 

您不要Select-Object訪問屬性的值。請注意cmdlet 名稱中的-Object,而不是。-Attribute相反,收集返回的對象,Get-AdComputer然後直接使用該屬性。

$my = Get-ADComputer -Identity $oldpc -Properties *
$psfl = $my.pSSFullLocation
Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$psfl"}

甚至這也可以完成**“-expandproperty”的工作**

$oldpc=read-host "Enter old pc name"
$newpc=read-host "Enter new pc name"

$my=Get-ADComputer -Identity $oldpc -Properties * | select -expandproperty pssfulllocation 

Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$my"}

引用自:https://serverfault.com/questions/841547