Ошибка импорта-PSSession в script, работает в оболочке
Я новичок в написании Powershell, и я работаю над пользовательским управлением Powershell script, но я столкнулся с странной ошибкой.
Следующий код работает, когда я запускаю его из оболочки, но не тогда, когда он запускается из script:
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection
Import-PSSession $Session
Когда я запускаю его в script с блоком Param()
в первой строке, он терпит неудачу со следующей ошибкой:
Import-PSSession: Cannot bind argument to parameter 'Path' becuase it is an empty string.
Я могу заставить Import-PSSession
работать, если я удалю блок Param()
, но я не уверен, как принимать аргументы командной строки для моего script в противном случае. Как я могу сохранить блок Param()
(или, вообще говоря, принять аргументы командной строки) и все еще иметь возможность импортировать сеанс PS?
Я использую Powershell v2 на сервере Windows 2008 R2, который пытается подключиться к серверу Exchange 2010.
Update:
У меня есть script с именем ManageUser.ps1
, который я запускаю из приглашения Powershell, например
.\ManageUser.ps1 -disableUser -username someuser
script начинается следующим образом:
Param(
[switch]$disableUser,
[string]$username
)
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection
Import-PSSession $Session
#more stuff past here...
Он не работает в команде Import-PSSession
. Но, если я удалю весь Param(...)
, импорт сеанса будет работать. Надеюсь, этого достаточно, чтобы вы это поняли!
Ответы
Ответ 1
Ваш script отлично работает на нем, а также при вызове из другого script:
& 'C:\Scripts\ManageUser.ps1' -disableUser -username "foo"
Get-Mailbox -resultsize 5 | ConvertTo-Csv -NoTypeInformation | Out-File C:\Scripts\mytest.csv
Последующие прогоны получат ошибку/предупреждение об ошибке из-за отсутствия -allowclobber
, как указано @SamuelWarren...
В вашем случае (по крайней мере, когда вы изначально пишете вопрос давно) ошибка произошла из-за другой переменной, которую вы здесь не упомянули. Вероятно, вы исправили это после первого запуска, а затем последующие тесты отображали ошибку AllowClobber.
Также стоит отметить (для тех, кто сталкивается с этим в будущем) до проверить путь к файлу, который вы вызываете. Просто потому, что вы пытаетесь использовать относительный путь .\myfile.ps1
, не означает, что PowerShell в настоящее время ищет правильный каталог.
Проверьте: $psscriptroot
Или Split-Path -Path $($global:MyInvocation.MyCommand.Path)