2015-12-09 6 views
1

Я использую Powershell и 7zip вместе:Правильный синтаксис команды alias в Powershell с -p?

$passwd = "password123" 
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe" 
sz a -t7z -sfx'7z.sfx' -ppasswordstring $execname $ssftxtname 

Если результат будет иметь пароль passwordstring. Как заменить последнюю строку, чтобы вместо этого использовать переменную $passwd? Это:

sz a -t7z -sfx'7z.sfx' -p$passwd $execname $ssftxtname 

Похоже, что не дает правильного результата, поскольку сбой ввода пароля невозможен. Я предполагаю, что это потому, что существует конкретный синтаксис для использования?

+0

ли '$ passwd' содержат пробелы или знаки пунктуации или специальные символы? – briantist

+0

@briantist Нет пробелов. Он может иногда содержать числа или символы (например, #). – Zeno

+1

Я не совсем уверен, в чем проблема, поэтому я не хочу писать полный ответ на данный момент, но у меня есть некоторые идеи. Попробуйте использовать кавычки '' -p $ passwd'' или попробуйте использовать другой метод для запуска 7zip, например 'Start-Process', где вы можете явно передать аргументы. – briantist

ответ

2

При использовании

sz a -t7z -sfx'7z.sfx' -p$passwd $execname $ssftxtname 

вы на самом деле установки пароля к строке 7 символов, состоящий из тезисов символов: $, p,a,s,s,w,d.

PowerShell применяет свою эвристику для «помощи» вам, считая, что знак доллара в середине строки, вероятно, не ссылка на переменную. Вы можете убедить его в противном случае просто процитировать весь аргумент:

sz a -t7z -sfx'7z.sfx' "-p$passwd" $execname $ssftxtname 

При том, что он будет установить пароль на содержимое переменной $passwd.

Обратите внимание, что если у вас есть @ KeithHill удобный модуль PSReadLine в вашем профиле автозагрузки, вы увидите, что у вас есть строка или переменная. Обратите внимание на три случая ниже. Первый - это то, что вы пробовали, но символы были взяты буквально. Добавление котировок во втором или третьем вариантах показывает, что $passwd является активной переменной.

enter image description here

0

Вы должны добавить папку 7-Zip в переменную окружения PATH, чтобы сделать вещи проще:

#find the 7-zip folder path 
$7zPath = (Get-ChildItem "C:\Program Files","C:\Program Files (x86)" -Include "7-zip" -Recurse -ErrorAction SilentlyContinue).FullName 

#add it to PATH environment variable 
$env:Path += ";$7zPath;" 

После этого вы можете запускать 7z команды непосредственно.