Ответ 1
попробуйте следующее:
powershell "C:\Dummy Directory 1\Foo.ps1 'C:\Dummy Directory 2\File.txt'"
My Powershell script, Foo.ps1:
Function Foo($directory)
{
echo $directory
}
if ($args.Length -eq 0)
{
echo "Usage: Foo <directory>"
}
else
{
Foo($args[0])
}
В консоли Windows:
powershell -command .\Foo.ps1
Результаты в: "Термин". \Foo.ps1 "не распознается как имя командлета, функции, файла script или исполняемой программы. Проверьте правописание имени или если путь был включен, проверьте правильность пути и повторите попытку."
Это несмотря на то, что Foo.ps1 находится в текущем каталоге, откуда я называю Powershell. Затем я попытался вызвать его, указав полный путь к файлу script; потому что этот путь содержит пространство, которое, я считаю, мне нужно каким-то образом процитировать. Также мне нужно передать аргумент script, который также является именем файла, содержащим одно или несколько пробелов. Независимо от того, что я пытаюсь, я не могу заставить его работать. Это мое лучшее предположение до сих пор:
powershell -command "'C:\Dummy Directory 1\Foo.ps1' 'C:\Dummy Directory 2\File.txt'"
Что дает ошибку "Неожиданный токен C:\Dummy Directory 2\File.txt" в выражении или выражении. В строке: 1 char: 136 ".
Изменить: я выяснил, почему
powershell -command .\Foo.ps1
не работает. Это связано с тем, что файл Microsoft.PowerShell_profile.ps1 имел
cd C:\
так как при запуске powershell он меняет каталог.
попробуйте следующее:
powershell "C:\Dummy Directory 1\Foo.ps1 'C:\Dummy Directory 2\File.txt'"
вы вызываете script файл, а не команду, поэтому вам нужно использовать файл, например:
powershell -executionPolicy bypass -noexit -file "c:\temp\test.ps1" "c:\test with space"
для PS V2
powershell.exe -noexit &'c:\my scripts\test.ps1'
(проверьте нижнюю часть этой страницы технологов http://technet.microsoft.com/en-us/library/ee176949.aspx)
Используя флаг -Command
, вы можете выполнить всю строку powershell, как если бы это была команда в приглашении PowerShell:
powershell -Command "& '<PATH_TO_PS1_FILE>' '<ARG_1>' '<ARG_2>' ... '<ARG_N>'"
Это решило мою проблему с запуском команд PowerShell в событиях Visual Studio Post-Build и Pre-Build.
Измените свой код на следующее:
Function Foo($directory)
{
echo $directory
}
if ($args.Length -eq 0)
{
echo "Usage: Foo <directory>"
}
else
{
Foo([string[]]$args)
}
И затем вызовите его как:
powershell -ExecutionPolicy RemoteSigned -File "c:\foo.ps1" "c:\Documents and Settings" "c:\test"
Добавьте смену параметров в верхней части файла ps1
Test.ps1
param(
# Our preferred encoding
[parameter(Mandatory=$false)]
[ValidateSet("UTF8","Unicode","UTF7","ASCII","UTF32","BigEndianUnicode")]
[string]$Encoding = "UTF8"
)
write ("Encoding : {0}" -f $Encoding)
результат
C:\temp> .\test.ps1 -Encoding ASCII
Encoding : ASCII