Ошибка импорта-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)