Как правильно отформатировать переменную scriptblock

#powershell-remoting

Вопрос:

Я довольно неопытен в Powershell и хотел написать (на мой взгляд, довольно простой сценарий), который позволит мне удаленно изменять локальных пользователей.

Я смог закодировать необходимые независимые шаги. Моим следующим шагом была попытка автоматизировать Этот Процесс.

Именно там я получил свой первый настоящий удар.

Единственное, что не работает, — это выполнить код внутри «$MakeTxT». Прямо сейчас он анализируется как строка, но я хотел бы вызвать команду для выполнения кода внутри «$MakeTxT».

После просмотра Интернета в течение последних нескольких дней я нашел несколько решений, которые я просто не понимаю. Большинство из них являются решениями в строке [«Преобразовать строку в блок сценариев»][1]

Моя главная проблема заключается в том, что я не понимаю функцию, используемую в этом примере, так как я хочу изменить ее, если мне когда-нибудь понадобится, или как правильно реализовать эту функцию.

Я знаю, что мне нужно «использовать:» для доступа к переменной, так как она находится за пределами блока сценариев. Я также где-то читал, что мне нужен амперсанд для распознавания содержимого переменной как кода. Но как мне отформатировать указанный код? Также, если у вас есть какие-либо рекомендации по ресурсам для улучшения моих навыков PS, я был бы очень признателен за это. 🙂

Вот пример, который я использовал для тестирования сценария. Все работает, кроме моего Скриптового блока.

 $MakeTxT = 
    {       
        New-Item C:Temptest.txt
        Set-Content C:Temptest.txt Test123
    }

foreach ($pc in $AdminList) 
{
    Invoke-Command -ComputerName $pc.Computer -ScriptBlock {amp;$using:MakeTxT} -Credential $Credentials
}   
 

ПРАВКА: я поймал себя на собственной ошибке. На самом деле это не означало, что помещение переменной без скобок после «-Scriptblock», по сути, просто заменит саму переменную тем, что определено как переменная. Так что мой правильный код должен был бы выглядеть так:

 $MakeTxT = 
    {       
        New-Item C:Temptest.txt
        Set-Content C:Temptest.txt Test123
    }

foreach ($pc in $AdminList) 
{
    Invoke-Command -ComputerName $pc.Computer -ScriptBlock $MakeTxT -Credential $Credentials
}  
 

[1]: https://www.improvescripting.com/how-to-convert-string-to-script-block-using-powershell/