2016-08-30 2 views
0

Вам нужна какая-то экспертная помощь от вашего гуру (после 3 дней попыток моего собственного lol). Вот часть моего сценария, который не работает:Котировки Powershell Use 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 отлично работает, за исключением случаев, когда я хочу включить в список аргументов годность ($ yy). Powershell не хочет заполнять переменную, чтобы настроить имя файла. Либо он бомбит, цитируя $ null, или задание завершается просто пробелом, где должен стоять $ yy.

Если я запускаю всего $ yy из приглашения, он возвращает правильное значение года, поэтому я предполагаю, что это неправильное использование кавычек. Но после 3 дней поиска в Google и попыток различных комбинаций, я бросаю полотенце. Любая помощь/руководство будет так высоко оценили :)

ответ

0

Пробовал выше, спасибо! Я думаю, что это может сводиться к версии PowerShell. Я пытаюсь выполнить это на сервере под управлением powershell v2.0, против другого сервера 2012 года.

Я сократил вниз код только линия в вопросе (так что я могу «F8», чтобы это проверить результаты) Здесь: Invoke-Command -ComputerName IPAddress -Credential $ moveitcred { Start -Process -FilePath "C: \ Program Files \ 7-Zip \ 7z.exe" -argumentlist "a -y C: \ Moveitft \ Dev \ Letters \ archive \ Letters $ {yy} .zip C: \ Moveitft \ Dev \ Письма \ Исходящие *. * " }

Оба из ваших предложений« работают », в том, что команда обрабатывает, однако ее по-прежнему не читает переменную правильно. Вот что я получаю как результирующая .zip

enter image description here

Причина, я имею в виду его PowerShell, является becuase, если я копировать/вставить ту же команду в Powershell v4.0 на моей рабочей машине, вы можете мгновенно увидеть по цветовой кодировке, что «$ yy» считается переменной, потому что она становится красной - и тогда код работает нормально с моей машины PS4.0.

На сервере PSv2.0 я пытаюсь запустить это, из этой же строки для «-argumentlist» появляется весь коричневый цвет/коричневый цвет - включая часть $ yy. Так что это намек на то, будет ли это работать или нет для меня.

+0

Есть ли причина предположить, что целевой сервер имеет другой год, чем тот, который делает вызов? Попробуйте объявить $ yy внутри скриптового блока, перед линией Start-Process и посмотреть, получится ли вам то, что вам нужно.В противном случае вам, возможно, придется использовать -ArgumentList вместе с Invoke-Command – notjustme

+0

CORRECT! Спасибо также старшему старшему, кто на самом деле задумался об этом вчера. А потом и вам, кто подтвердил это сегодня утром. Это разрешило это - объявив в блоке скрипта! –

1

Проблема не в цитировании, а о переменной области. Внутри скриптового блока, который вы выполняете, powershell ничего не знает об $yy var. Поэтому вам нужно сказать, где можно получить значение. Вы можете сделать это, используя параметр argumentList. Я вижу, что вы уже это делаете, но делаете это неправильно (элемент move не поддерживает этот параметр). Посмотрите следующие примеры, чтобы понять концепцию, я думаю, что вы решите свою проблему:

# 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 
Смежные вопросы