2016-08-30 4 views
0

전문가의 도움이 필요합니다 (내 자신의 LOL을 시도한 지 3 일 후) 전문가가 필요합니다. 여기 내 스크립트에서 실패한 부분 :Powershell Quotes asisstance 사용

$yy=(get-date).Year 

Invoke-Command -ComputerName *ipaddress* -Credential $moveitcred { 
move-item -path "C:\iCApps\Dev\LetterGenerator\Letters\FTS\EDMS\*.txt" -destination "C:\Moveitft\Dev\Letters\Outbound" -force 
Start-Process -FilePath "C:\Program Files\7-Zip\7z.exe" -ArgumentList "a -y C:\Moveitft\Dev\Letters\archive\Letters$yy_.zip C:\Moveitft\Dev\Letters\Outbound\*.*" 
} 

이동이 잘됩니다. 그리고 zip은 잘 작동합니다. 인수 목록에 연도 varible ($ yy)를 포함하고 싶을 때를 제외하고. Powershell은 파일 이름을 조정하기 위해 변수를 채우려하지 않습니다. $ null을 인용하면 폭탄이 터지거나 $ yy가 있어야하는 빈칸으로 작업이 완료됩니다.

프롬프트에서 $ yy 만 실행하면 정확한 연도 값이 반환되므로 부적절한 인용 부호 사용을 추측합니다. 그러나 3 일 동안 인터넷 검색을하고 여러 가지 조합을 시도해 본 후 수건을 던지고 있습니다. 어떤 도움/지침은 너무 크게 감상 할 수있다 :)

답변

0

위의 시도, 고마워요! 나는 이것이 파워 쉘 버전으로 끓일 수 있다고 생각한다. PowerShell v2.0을 실행하는 서버에서 다른 2012 서버에 대해이 작업을 실행하려고합니다.

나는 질문 (내가 "F8"는 결과를 테스트 할 수 있습니다) 여기가 단지 라인에 코드를 단축했습니다 호출-명령 -ComputerName 여기서 ipaddress -Credential $ moveitcred { 시작 C : \ Program Files \ 7-Zip \ 7z.exe "-argumentlist"-y C : ₩ Moveitft ₩ Dev ₩ 편지 ₩ archive ₩ 편지 $ {yy} .zip C : ₩ Moveitft ₩ Dev ₩ 편지 \ 아웃 바운드 *. * " }

귀하의 제안"작업 "은 명령이 처리하지만 여전히 변수를 올바르게 읽지 않습니다. 여기에 내가으로 무엇을 얻을 결과적인 .ZIP 내가 복사/내 자신의 생산 시스템에서 파워 쉘 4.0에 동일한 명령을 붙여 넣으면 나는 그것의 PowerShell을 생각하고 그 이유는, becuase있다

enter image description here

, 당신이 할 수있는 즉시 "$ yy"가 빨간색으로 변하기 때문에 변수로 간주되는 색상 코딩을보고 코드가 내 PS4.0 시스템에서 정상적으로 작동합니다.

내가 실행하려고하는 PSv2.0 서버에서 "-argumentlist"와 동일한 줄이 $ yy 부분을 포함하여 모든 밤색/갈색으로 나타납니다. 그래서 그것이 나에게 도움이 될지 아닌지에 대한 암시의 종류.

+0

대상 서버의 호출 연도가 다른 것으로 가정 할 이유가 있습니까? Start-Process 라인 앞에 $ yy를 scriptblock 안에 선언하고, 나중에 yo가 필요한지 확인하십시오.그렇지 않으면 Invoke-Command와 함께 -ArgumentList를 사용해야 할 수도 있습니다. – notjustme

+0

CORRECT! MJSR 선배에게도 감사합니다. 실제로 어제에 대해 생각하고 있습니다. 그리고 오늘 아침에 누가 당신에게 그것을 확인 했습니까 :) 이것은 해결되었습니다 - 스크립트 블록에서 선언하십시오! –

1

인용 부호가 아니라 변수 범위에 관한 문제입니다. 실행중인 스크립트 블록 내에서 powershell은 $yy var에 대해 아무것도 모릅니다. 그래서 당신은 그 값을 어디서 구해야하는지 말해야합니다. argumentList 매개 변수를 사용하면됩니다. 나는 당신이 이미 그것을하고 있지만 당신이 잘못하고 있다고 생각한다 (move-item은 그 매개 변수를 지원하지 않는다). 개념을 이해하기 위해 다음 예제를 살펴보면 문제를 해결할 수 있다고 생각합니다.

# this is fine and simple 
$yy="Hello scriptblocks!" 
Invoke-Command -ScriptBlock { "whatever you want to run that use the an external var. $yy" } -ArgumentList $yy 

# this is incorrect 
Invoke-Command -ScriptBlock { "whatever you want to run that use the an external var. $yyCarefulWithThisText" } -ArgumentList $yy 

# this shows how you could resolve the variable when you want to put text around 
Invoke-Command -ScriptBlock { "whatever you want to run that use the an external var. $($yy)CarefulWithThisText" } -ArgumentList $yy 

# output1: whatever you want to run that use the an external var. Hello scriptblocks! 
# output2: whatever you want to run that use the an external var. 
# output3: whatever you want to run that use the an external var. Hello scriptblocks!CarefulWithThisText