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