2017-01-27 7 views
1

동적 scriptblock을 만들려고하므로 scriptblock에서 변수를 사용할 수 있습니다. 내가 기대하는 생산하고 무엇 PowerShell을 ISE에서 스크립트를 실행Powershell ISE에서 scriptblock에 문제가 있습니다. 문자열 표현을 메모장에 붙여 넣으면 예기치 않은 문자가 나타납니다.

$Servers = "server1", "server2" 

$Command = "c:\plink -t [email protected]" + $Servers[0] + " -pw 'password'" 
$Command = [Scriptblock]::Create($Command) 

$Command2 = {c:\plink -t [email protected] -pw 'password'} 

$command 
$command2 

:

내 코드입니다

c:\plink -t [email protected] -pw 'password' 
c:\plink -t [email protected] -pw 'password' 

$ 명령과 모두 $ Command2를 현재 동일한 출력, 둘 다 있습니다 Get-Member -Verbose로 체크하면 유효한 scriptblocks.

제 문제는 첫 번째 줄을 실행하면 연결 오류가 발생하며, $ command2의 동일한 출력이 제대로 작동하고 서버에 연결된다는 것입니다. ,

enter image description here

당신은 JPG에서 볼 수 있듯이 :

이 문제를 조사, 그 문제 메모장에 ISE의 ​​출력 창에 두 개의 생산 라인을 계시 붙여 넣기/그 사본을 발견 '@'기호 바로 다음에 이상한 문자가 추가되어 명령이 실패하게됩니다.

왜 이런 일이 발생하는지 (그리고 어떻게 해결할 수 있는지) 어떤 생각이 들지 않습니까? @ Fredster의 의견을 바탕으로

+0

나는 당신이 의미하는 바를 알고, 추가 된 문자 값 8은 server1 이름 앞에서 ... 도대체 어디에서 왔는지, 롤! 도움을 주셔서 감사합니다. 나는 결코 그것을 발견하지 못했을 것입니다. (ISE! – Fredster

+0

문자 값 8에 전혀 보이지 않으므로 [backspace] (http://www.asciitable.com/)입니다 - 우연히 어떻게합니까? – TessellatingHeckler

+0

나는 전혀 모른다 : 나는 며칠 동안 고생하고있다 ... 붙여 넣기 만하면 나는 이상한 성격을 발견했다 ... – Fredster

답변

3

는 :

이 밝혀 보이지 않는 제어 문자이 할당 문으로 느끼게했던 그 : 나중에로 변환 된 문자열을 구축 할 $Servers[0]를 사용하여

$Servers = "server1", "server2" 

스크립트 블럭은 제어 블럭이 스크립트 블럭의 보이지 않는 부분이되어 호출에 문제를 일으켰습니다.

이러한 문제를 진단하려면 Format-Hex cmdlet (PSv5 +)에 파이프 값을 입력합니다.이 값은 일반적으로 보이지 않는 문자를 포함하여 문자열을 구성하는 모든 문자를 표시합니다.
경고문 : 기본적으로 ASCII 범위의 문자 만 올바르게 표시됩니다. 다른 것은 단순히 문자 그대로 ?으로 표시됩니다. 필요에 따라 -Encoding 매개 변수를 사용하십시오.

+2

표시된 답변! 며칠 동안 boggled! – Fredster