Назад | Перейти на главную страницу

как использовать свойства объекта PowerShell напрямую без приведения типов и разделения?

Я создал небольшой скрипт для передачи значения атрибута ПК Active Directory, называемого pssfulllocation, с одного компьютера на другой компьютер.

Для этого мне нужно использовать приведение типов + разделение ..

Вот сценарий, который работает

$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 для доступа к значению атрибута. Обратите внимание -Objectне -Attributeв имени командлета. Вместо этого соберите объект, возвращенный Get-AdComputer затем используйте атрибут напрямую.

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

Или даже это могло бы сработать "-расширить недвижимость"

$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"}