Краткий ответ, включая вопрос: Какого черта это должен быть скрипт PowerShell?
Вы можете просто создать командный файл, содержащий
%WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
%WINDIR%\system32\inetsrv\appcmd.exe set app "WebRole_IN_0_VC/" /applicationPool:"VCPool"
и запустите его напрямую, вместо того, чтобы пытаться выяснить политики выполнения и т. д.
Кроме того, appcmd
должен , вероятно быть в вашем PATH
, так что вы можете запустить его напрямую, без необходимостичтобы указать полный путь к программе.
Более длинный ответ, фактически используя PowerShell: Здесь есть две проблемы.
Выхотите запустить сценарий PowerShell без соответствующей установленной политики выполнения.Это можно сделать с помощью
powershell -ExecutionPolicy Unrestricted -File myscript.ps1
Вам необходимо настроить использование переменных среды в скриптах PowerShell, так как %
не используется для расширения там переменных среды.Таким образом, вам действительно нужно
& $Env:WinDir\system32\inetsrv\appcmd.exe add apppool /name:VCPool /managedRuntimeVersion:v4.0 /managedPipelineMode:Integrated
& $Env:WinDir\system32\inetsrv\appcmd.exe set app WebRole_IN_0_VC/ /applicationPool:VCPool
Обратите внимание, что вам нужен амперсанд (&
) перед каждой строкой, поскольку имя переменной в начале строки переключается в режим выражения , пока выхочу выполнить команду, поэтому требуется режим команды .
Более того, аргументы в кавычках могут быть проблемой в PowerShell.PowerShell пытается цитировать аргументы, когда это необходимо, и не всегда очевидно, когда что-то идет не так, как на самом деле получается на другом конце.В этом случае самый простой способ - не указывать аргументы каким-либо образом, который обеспечивает их корректность:
PS Home:\> args add apppool /name:VCPool /managedRuntimeVersion:v4.0 /managedPipelineMode:Integrated
argv[1] = add
argv[2] = apppool
argv[3] = /name:VCPool
argv[4] = /managedRuntimeVersion:v4.0
argv[5] = /managedPipelineMode:Integrated
PS Home:\> args set app WebRole_IN_0_VC/ /applicationPool:VCPool
argv[1] = set
argv[2] = app
argv[3] = WebRole_IN_0_VC/
argv[4] = /applicationPool:VCPool
Однако , если appcmd
фактически нуждается кавычки вокруг аргумента после двоеточия, затем вам нужно заключить весь аргумент в кавычки single и добавить двойные кавычки обратно в:
& $Env:WinDir\system32\inetsrv\appcmd.exe set app WebRole_IN_0_VC/ '/applicationPool:"VCPool"'