如何在Powershell脚本中编写此代码?

Hou*_*man 4 powershell

我是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:这里有两个问题.

  1. 您希望在没有相应的执行策略集的情况下运行PowerShell脚本.这可以通过以下方式完成

    powershell -ExecutionPolicy Unrestricted -File myscript.ps1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您需要调整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)