Import-PSSession 在脚本中失败,在 shell 中工作
Posted
技术标签:
【中文标题】Import-PSSession 在脚本中失败,在 shell 中工作【英文标题】:Import-PSSession fails in script, works in shell 【发布时间】:2017-04-17 20:56:25 【问题描述】:我是 Powershell 脚本的新手,我正在处理用户管理 Powershell 脚本,但我遇到了一个奇怪的错误。
以下代码在我从 shell 运行时有效,但在从脚本运行时无效:
$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.
如果我删除我的Param()
块,我可以让Import-PSSession
工作,但我不确定如何接受我的脚本的命令行参数。我怎样才能保留 Param()
块(或更一般地说,接受命令行参数)并且仍然能够导入 PS 会话?
我在尝试连接到 2010 Exchange 服务器的 Windows 2008 R2 服务器上使用 Powershell v2。
更新:
我有一个名为 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(...)
,会话导入将起作用。我希望这足以让你理解它!
【问题讨论】:
您希望人们在不显示您的代码的情况下解决您的代码问题?你是如何编写param()
块的?你是怎么调用脚本的?
@TessellatingHeckler 对不起,我以为我已经提供了足够的信息。我现在更新了我的问题。请让我知道是否还有其他有助于了解的信息!谢谢。
只是想知道您是否尝试将 -AllowClobber 选项添加到 Import-PSSession?也许 Powershell 在后台进行了一些默认参数设置?
@SamuelWarren 我已经有一段时间没有使用这个脚本了,但我很确定我确实尝试过添加 -AllowClobber。感谢您的建议。
【参考方案1】:
您的脚本可以单独运行,并且在从另一个脚本中调用时也可以正常运行:
& 'C:\Scripts\ManageUser.ps1' -disableUser -username "foo"
Get-Mailbox -resultsize 5 | ConvertTo-Csv -NoTypeInformation | Out-File C:\Scripts\mytest.csv
由于没有@SamuelWarren 提到的-allowclobber
,后续运行将收到导入错误/警告...
在您的情况下(至少在很久以前最初编写问题时),错误是由于您在此处未提及的另一个变量造成的。您可能在第一次运行后修复了该问题,然后后续测试显示 AllowClobber 错误。
另外值得注意的是(对于将来遇到此问题的任何人)检查您正在调用的文件的路径。仅仅因为您尝试使用相对路径 .\myfile.ps1
并不意味着 PowerShell 当前正在查找正确的目录。
检查:$psscriptroot
或Split-Path -Path $($global:MyInvocation.MyCommand.Path)
【讨论】:
以上是关于Import-PSSession 在脚本中失败,在 shell 中工作的主要内容,如果未能解决你的问题,请参考以下文章
Office 365 Troubleshooting:Import-PSSession 出错
当 sftp 语句之一在 Linux 中失败时,sftp 脚本失败