2011-11-27 4 views
3

나는 Powershell 스크립트에 매우 익숙하다. Powershell 스크립트에서 이것을 어떻게 작성합니까?

나는 cmd를 내가 PowerShell 스크립트 내에서 두 줄 필요

powershell.exe Set-ExecutionPolicy Unrestricted 
powershell.exe .\startup.ps1 

에서 파워 쉘 스크립트를 실행하려합니다.

%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" 

ps1 파일에 다음과 같이 간단하게 작성할 수 있습니까? 당신은 당신이 당신의 CMD 파일 내에서 단일 통화로 두 개의 발사 문을 결합 할 수 있습니다 알고 싶어 수

& %WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated" 

많은 감사

답변

12

질문을 포함하여 짧은 대답 : 그게 왜 PowerShell 스크립트 여야합니까?

당신은 간단하게, 대신 직접 또한 등, 실행 정책을 알아 내기 위해

시도의, appcmd아마 당신의 PATH에 있어야 배치

%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" 

가 포함 된 파일을 실행을 만들 수 있습니다 따라서 프로그램의 전체 경로를 지정할 필요없이 직접 실행할 수 있습니다.


긴 대답은, 실제로 PowerShell을 사용 : 여기에 두 가지 문제가 있습니다.

  1. 적절한 실행 정책을 설정하지 않고 PowerShell 스크립트를 실행하려고합니다. %가이 환경 변수를 확장하는 데 사용되지 않기 때문에 이것은, 당신은 PowerShell 스크립트에서 환경 변수 사용을 조정해야

    powershell -ExecutionPolicy Unrestricted -File myscript.ps1 
    
  2. 수행 할 수 있습니다. 당신이 명령을 실행 할 때 그래서 당신은 실제로 당신이 한 줄의 시작 부분에서 변수 이름으로 각 행 앞에 앰퍼샌드 (&)을 필요도

    & $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 경우 실제로 요구 인수를 큰 따옴표를 콜론 후 다음 : 제대로 나오지 보장 whcih이 경우 가장 쉬운 방법은 어떤 방법으로 인수를 인용하지 않는 것입니다 매우 감사합니다,

    & $Env:WinDir\system32\inetsrv\appcmd.exe set app WebRole_IN_0_VC/ '/applicationPool:"VCPool"' 
    
+0

조이 : 당신은 단일 따옴표와 함께 전체 인수를 인용하고 다시 따옴표를 추가해야 이 우수한 스텝 바이 스텝 가이드는 많은 도움이됩니다. 이제 작동합니다. – Houman

0

: APPCMD 명령어 호출에 대한

powershell.exe -noprofile -executionpolicy unrestricted -file .\startup.ps1 

유일한 약간 이상한 것은. PowerShell의 exe는 공백이없는 경우에도 매개 변수를 따옴표로 묶어야합니다. 이미이 작업을 수행 했으므로 작동해야합니다.

관련 문제