4

Я новичок в написании сценариев Powershell, и я работаю над скриптом Powershell для управления пользователями, но у меня возникла странная ошибка.Импорт-PSSession сбой в скрипте, работает в оболочке

Следующий код работает, когда я запускаю его из командной строки, но не тогда, когда он запускается из сценария:

$UserCredential = Get-Credential 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionURI http://servername/Powershell/ -Authentication Kerberos -Credential $UserCredential -AllowRedirection 
Import-PSSession $Session 

Когда я запускаю его в сценарии с Param() блока на первой линии, то терпит неудачу со следующей ошибкой:

Import-PSSession: Cannot bind argument to parameter 'Path' becuase it is an empty string. 

я могу получить Import-PSSession работать, если я удалю свой Param() блок, но я не уверен, как принимать аргументы командной строки для моего сценария иначе. Как я могу сохранить блок Param() (или, вообще говоря, принять аргументы командной строки) и все еще иметь возможность импортировать сеанс PS?

Я использую Powershell v2 на сервере Windows 2008 R2, который пытается подключиться к серверу Exchange 2010.

Update:

У меня есть сценарий, названный ManageUser.ps1, что я бегу из строки Powershell как

.\ManageUser.ps1 -disableUser -username someuser 

Сценарий начинается так:

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(...), будет работать импорт сеанса. Надеюсь, этого достаточно, чтобы вы это поняли!

+0

Вы хотите, чтобы люди устранить код, не показывая свой код? Как вы пишете блок 'param()'? Как вы называете сценарий? – TessellatingHeckler

+0

@TessellatingHeckler Извините, я думал, что дал достаточно информации. Я обновил свой вопрос сейчас. Пожалуйста, дайте мне знать, если есть что-то еще, что было бы полезно знать! Благодарю. – Logan

+0

Просто интересно, пытаетесь ли вы добавить параметр -AllowClobber в Import-PSSession? Возможно, есть некоторые настройки параметров по умолчанию, которые происходят в фоновом режиме Powershell? – SamuelWarren

ответ

0

Ваш скрипт отлично работает на своем собственном, а также при вызове из другого сценария:

& '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)

Смежные вопросы