【问题标题】:Import-Pssession is not importing cmdlets when used in a custom module在自定义模块中使用时,Import-Pssession 不导入 cmdlet
【发布时间】:2018-10-26 01:32:53
【问题描述】:

我有一个 PowerShell 脚本/函数,当我在我的 PowerShell 配置文件中使用它或在 PowerShell 窗口中手动复制/粘贴该函数时效果很好。

我正在尝试使我团队的其他成员可以作为一个模块访问该功能。我希望将模块存储在一个中心位置,以便我们都可以将它添加到我们的 PSModulePath。

这里是基本功能的副本:

Function Connect-O365{
    $o365cred = Get-Credential username@domain.onmicrosoft.com
    $session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $o365cred -Authentication Basic -AllowRedirection
    Import-PSSession $session365 -AllowClobber
}

如果我将此函数保存在我的 PowerShell 配置文件中,它可以正常工作。我可以点源一个带有此函数的 *.ps1 脚本,它也可以工作。

问题是当我将函数保存为 *.psm1 PowerShell 脚本模块时。该函数运行良好,但 Import-PSSession 中导出的命令均不可用。我认为这可能与模块范围有关。

我正在寻找有关如何解决此问题的建议。

编辑

当我创建以下模块并运行 Connect-O365 时,导入的 cmdlet 将不可用。

$scriptblock = {
    Function Connect-O365 {
        $o365cred = Get-Credential username@domain.onmicrosoft.com
        $session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $o365cred -Authentication Basic -AllowRedirection
        Import-PSSession $session365 -AllowClobber
    }
}

New-Module -Name "Office 365" -ScriptBlock $scriptblock

当我导入没有 Connect-O365 功能的下一个模块时,导入的 cmdlet 可用。

$scriptblock = {
    $o365cred = Get-Credential username@domain.onmicrosoft.com
    $session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $o365cred -Authentication Basic -AllowRedirection
    Import-PSSession $session365 -AllowClobber
}

New-Module -Name "Office 365" -ScriptBlock $scriptblock

这似乎是某种范围问题,只是不确定如何解决。

【问题讨论】:

    标签: powershell powershell-3.0


    【解决方案1】:

    在 TechNet 的帮助下,我能够修改脚本模块,使其按预期工作。

    function Connect-O365 {
        $o365cred = Get-Credential username@domain.onmicrosoft.com
        $session365 = New-PSSession `
                        -ConfigurationName Microsoft.Exchange `
                        -ConnectionUri "https://ps.outlook.com/powershell/" `
                        -Credential $o365cred `
                        -Authentication Basic `
                        -AllowRedirection 
        Import-Module (Import-PSSession $session365 -AllowClobber) -Global
    }
    

    TechNet Post

    【讨论】:

    • 谢天谢地,我能够 +1 问答。这次真是万分感谢。我建议你标记为答案。
    猜你喜欢
    • 2011-02-19
    • 2015-11-02
    • 2021-07-31
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多