Недавно улучшал под себя Sophia Script и столкнулся в том числе и с похожей проблемой. Сути сейчас не вспомню, но если интересно самому разобраться, то тут только по старинке, отладкой с временными переменными, чтобы видеть полностью как выглядит вызов второго скрипта. Проблема там именно в разнообразии вариантов определения строк: '', "", """""", '''''' и пр. В процессе дополнительных вызовов одного повершелл скрипта из другого и возникают ошибки (с нашей точки зрения) экранирования.
Помню что получалось вызывать скрипт из отдельного файла, но чувство прекрасного требовало чтобы все было в одном файле, поэтому у меня получился такой вариант:
$UnpinEdge = {
function Unpin
{
param
(
[string]$user_profile,
[string]$unpin_cmd
)
if (Test-Path -Path """$user_profile\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Microsoft Edge.lnk""")
{
$Shell = (New-Object -ComObject Shell.Application).NameSpace("""$user_profile\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar""")
$Shortcut = $Shell.ParseName('Microsoft Edge.lnk')
$Shortcut.Verbs() | Where-Object -FilterScript {$_.Name -eq $unpin_cmd} | ForEach-Object -Process {$_.DoIt()}
}
}
}
Start-Process -Credential $LOGGED_USER_CRED -FilePath PowerShell -ArgumentList "-Command & {$UnpinEdge Unpin -user_profile '$LOGGED_USER_PROFILE' -unpin_cmd '$UnpinFromTaskbarCmd'}" -Wait -WindowStyle Hidden
-Credential $LOGGED_USER_CRED замените на -Verb RunAs (у меня просто обратная ситуация: скрипт запускается под админом, а где надо берутся данные залогиненного в системе пользователя). И самое главное: у скриптблока ($UnpinEdge) есть ограничение на длину строку (около 700-800 знаков), сверх которого она просто обрезается и соответственно вызывает ошибку. Поэтому если ваш скрипт большой, то тут только вызов из отдельного файла