[powershell] PowerShell에서 긴 명령을 여러 줄로 나누는 방법

PowerShell에서 다음과 같은 명령을 어떻게 여러 줄에 나눕니 까?

&"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" -dest:contentPath="c:\websites\xxx\wwwroot\,computerName=192.168.1.1,username=administrator,password=xxx"



답변

후행 백틱 문자, 즉

&"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" `
-verb:sync `
-source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" `
-dest:contentPath="c:\websites\xxx\wwwroot,computerName=192.168.1.1,username=administrator,password=xxx"

공백이 중요합니다. 필요한 형식은 Space`Enter입니다.


답변

더 깨끗한 인수 전달 방법은 splatting 입니다.

다음과 같이 매개 변수와 값을 해시 테이블로 정의하십시오.

$params = @{ 'class' = 'Win32_BIOS';
             'computername'='SERVER-R2';
             'filter'='drivetype=3';
             'credential'='Administrator' }

그런 다음 커맨드 렛을 다음과 같이 호출하십시오.

Get-WmiObject @params

Microsoft 문서 : Splatting 정보

TechNet Magazine 2011 : Windows PowerShell : 스플래 팅

Powershell 2.0 이상에서 작동하는 것 같습니다


답변

아, 그리고 매우 긴 문자열을 나누고 싶다면 HTML 과 같이 @바깥 쪽의 양쪽에 를 넣어서 할 수 있습니다 ".

$mystring = @"
Bob
went
to town
to buy
a fat
pig.
"@

당신은 이것을 정확히 얻습니다 :

Bob
went
to town
to buy
a fat
pig.

Notepad ++를 사용 하는 경우 문자열 블록으로 올바르게 강조 표시됩니다.

이제 해당 문자열에 큰 따옴표를 포함 시키려면 다음과 같이 추가하십시오.

$myvar = "Site"
$mystring = @"
<a href="http://somewhere.com/somelocation">
Bob's $myvar
</a>
"@

당신은 이것을 정확히 얻을 것입니다 :

<a href="http://somewhere.com/somelocation">
Bob's Site
</a>

그러나 @ -string에 큰 따옴표를 사용하면 메모장 ++은이를 인식하지 못하며 경우에 따라 따옴표 또는 따옴표가없는 것처럼 구문 색상 표시를 전환합니다.

더 좋은 점은 $ variable을 삽입하는 곳마다 해석됩니다! (텍스트에 달러 기호가 필요한 경우“$ not-a-variable ”과 같은 체크 표시로 이스케이프 처리하십시오.)

주의! 라인의 시작 부분에 결승전 "@을 넣지 않으면 실패합니다. 코드에서 들여 쓰기 할 수 없다는 것을 알아내는 데 1 시간이 걸렸습니다!

다음은 주제에 대한 MSDN 입니다. Windows PowerShell “Here-Strings”사용


답변

백틱 연산자를 사용할 수 있습니다.

& "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" `
    -verb:sync `
    -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" `
    -dest:contentPath="c:\websites\xxx\wwwroot\,computerName=192.168.1.1,username=administrator,password=xxx"

그것은 여전히 ​​내 취향에 비해 너무 길기 때문에 잘 알려진 변수를 사용합니다.

$msdeployPath = "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
$verbArg = '-verb:sync'
$sourceArg = '-source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web"'
$destArg = '-dest:contentPath="c:\websites\xxx\wwwroot\,computerName=192.168.1.1,username=administrator,password=xxx"'

& $msdeployPath $verbArg $sourceArg $destArg


답변

기능이있는 경우 :

$function:foo | % Invoke @(
  'bar'
  'directory'
  $true
)

cmdlet 이있는 경우 :

[PSCustomObject] @{
  Path  = 'bar'
  Type  = 'directory'
  Force = $true
} | New-Item

응용 프로그램이있는 경우 :

{foo.exe @Args} | % Invoke @(
  'bar'
  'directory'
  $true
)

또는

icm {foo.exe @Args} -Args @(
  'bar'
  'directory'
  $true
)


답변

PowerShell 5 및 PowerShell 5 ISE에서는 각 줄 끝에 표준 백틱이 아닌 여러 줄 편집에 Shift+ 만 사용하는 것도 가능합니다 .Enter`

PS> &"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" # Shift+Enter
>>> -verb:sync # Shift+Enter
>>> -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" # Shift+Enter
>>> -dest:contentPath="c:\websites\xxx\wwwroot,computerName=192.168.1.1,username=administrator,password=xxx"


답변

계산을 통한 스 플랫 방법

스 플랫 방법을 선택하는 경우 다른 매개 변수를 사용하여 계산을 수행하십시오. 실제로 때로는 변수를 먼저 설정 한 다음 해시 테이블을 만들어야합니다. 또한 형식에는 키 값이나 세미콜론 (작은 따옴표) 주위에 작은 따옴표가 필요하지 않습니다 (위에서 언급 한 것처럼).

Example of a call to a function that creates an Excel spreadsheet

$title = "Cut-off File Processing on $start_date_long_str"
$title_row = 1
$header_row = 2
$data_row_start = 3
$data_row_end = $($data_row_start + $($file_info_array.Count) - 1)

# use parameter hash table to make code more readable
$params = @{
    title = $title
    title_row = $title_row
    header_row = $header_row
    data_row_start = $data_row_start
    data_row_end = $data_row_end
}
$xl_wksht = Create-Excel-Spreadsheet @params

참고 : 파일 배열에는 스프레드 시트를 채우는 방법에 영향을주는 정보가 포함되어 있습니다.