我是Powershell脚本的新手.
我试图从cmd运行powershell脚本
powershell.exe Set-ExecutionPolicy Unrestricted
powershell.exe .\startup.ps1
Run Code Online (Sandbox Code Playgroud)
我需要在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"
Run Code Online (Sandbox Code Playgroud)
我可以在ps1文件中简单地这样写吗?
& %WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
Run Code Online (Sandbox Code Playgroud)
非常感谢
Joe*_*oey 12
简短的回答,包括一个问题:为什么地狱需要成为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"
Run Code Online (Sandbox Code Playgroud)
并直接运行,而不是试图找出执行政策等.
此外,appcmd应该大概是你的PATH,这样你就可以直接而无需指定完整路径到程序运行它.
更长的答案,实际上使用PowerShell:这里有两个问题.
您希望在没有相应的执行策略集的情况下运行PowerShell脚本.这可以通过以下方式完成
powershell -ExecutionPolicy Unrestricted -File myscript.ps1
Run Code Online (Sandbox Code Playgroud)您需要调整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
Run Code Online (Sandbox Code Playgroud)
另请注意,&在每行之前需要一个&符号()作为变量名,在行的开头切换到表达式模式时,您需要运行命令,因此需要命令模式.
此外,引用的参数在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
Run Code Online (Sandbox Code Playgroud)
但是,如果在冒号后appcmd实际需要参数周围的引号,则需要用单引号引用整个参数并将双引号添加回:
& $Env:WinDir\system32\inetsrv\appcmd.exe set app WebRole_IN_0_VC/ '/applicationPool:"VCPool"'
Run Code Online (Sandbox Code Playgroud)