如何在不进行类型转换和拆分的情况下直接使用 powershell 对象属性?

use*_*879 5 scripting powershell active-directory

我创建了一个小脚本来将名为 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"}
Run Code Online (Sandbox Code Playgroud)

并且输出将很好地完成预期的工作..以这种方式..这是期望的结果..

在此处输入图片说明

但是,如果我不按照以下脚本使用类型转换 + 拆分--

$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"}
Run Code Online (Sandbox Code Playgroud)

输出在下面..这不是我想要的..

在此处输入图片说明

简而言之,如果我不使用类型转换 + 拆分输出将添加为 @{pSSFullLocation=C/BRU/B/0/ADM/1 但它只能添加为 C/BRU/B/0/ADM/1按照这个:

在此处输入图片说明

我觉得类型转换 + 拆分应该是一种解决方法,而不是正确的方法.. 任何其他 powershell 方法可以在不使用类型转换 + 拆分的情况下实现这一点?

jsc*_*ott 5

不要这样做:

$my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation 
Run Code Online (Sandbox Code Playgroud)

您不会Select-Object访问属性的值。请注意cmdlet 名称中的-Object,而不是-Attribute。相反,收集返回的对象Get-AdComputer然后直接使用该属性。

$my = Get-ADComputer -Identity $oldpc -Properties *
$psfl = $my.pSSFullLocation
Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$psfl"}
Run Code Online (Sandbox Code Playgroud)