Как ссылаться на переменные при выполнении команды оболочки в PowerShell? - PullRequest
1 голос
/ 03 июня 2011

Я новичок в PowerShell. Что не так с моим сценарием ниже? Он не хочет выдавать значение $config. Однако, когда я заключаю эту команду в двойные кавычки, все выглядит хорошо.

param($config, $logfolder)

# Must run log analysis in chronological order.
ls $logfolder | Sort-Object LastWriteTime | % {
    perl D:\Websites\_awstats\wwwroot\cgi-bin\awstats.pl -LogFile="$($_.FullName)" -config=$config update
}

# Execute with - .\regen-logs.ps1 webgenesis "C:\inetpub\logs\LogFiles\W3SVC5"
# Returns for each file - Error: Couldn't open config file "awstats.config.conf" nor "awstats.conf" after searching in path "D:\Websites\_awstats\wwwroot\cgi-bin,/etc/awstats,/usr/local/etc/awstats,/etc,/etc/opt/awstats": No such file or directory

Как есть, то, что выдается и выполняется, похоже, передается в качестве аргумента "-config = $ config" По крайней мере, это мое лучшее предположение. Я не знаю, правильно ли работает $ _.

Если я поставлю кавычки вокруг команды perl следующим образом, я получу команду, которую хочу выполнить.

ls $logfolder | Sort-Object LastWriteTime | % {
    "perl D:\Websites\_awstats\wwwroot\cgi-bin\awstats.pl -LogFile=`"$($_.FullName)`" -config=$config update"
}

# Outputs for each log file something like - perl D:\Websites\_awstats\wwwroot\cgi-bin\awstats.pl -LogFile="C:\inetpub\logs\LogFiles\W3SVC5\u_ex110602.log" -config=webgenesis update

Ответы [ 3 ]

3 голосов
/ 03 июня 2011

Если заключить в кавычки правильную командную строку, один из способов выполнить содержимое строки - Invoke-Expression (псевдоним iex):

$v = "myexe -myarg1 -myarg2=$someVar"
iex $v
1 голос
/ 03 июня 2011

Положите двойные кавычки вокруг "-config=$config".Без этого PowerShell будет интерпретировать -config=$config как один строковый аргумент, который просто содержит знак $.

0 голосов
/ 03 июня 2011

Я думаю, вам нужно запустить команду perl с &, чтобы PowerShell интерпретировал вещи как команду, а не строку.

& perl D:\Websites\_awstats\wwwroot\cgi-bin\awstats.pl -LogFile=`"$($_.FullName)`" -config=$config update

Также см .: Запуск программыforeach

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...