我有一个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
}
Run Code Online (Sandbox Code Playgroud)
如果我在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
Run Code Online (Sandbox Code Playgroud)
当我在没有Connect-O365功能的情况下导入下一个模块时,可以使用导入的cmdlet.
$scriptblock = {
$o365cred = Get-Credential username@domain.onmicrosoft.com
$session365 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential …Run Code Online (Sandbox Code Playgroud) 我正在尝试并行从Office 365 Exchange Online中提取数据以节省时间.我无法完成我想要做的事,下面的代码是我到目前为止"最接近"的代码.
Workflow Get-MailboxStatisticsParallel{
param ($o365cred)
$session = InlineScript {
New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $using:o365cred -Authentication Basic -AllowRedirection
}
InlineScript {
Invoke-Command -Session $session -ScriptBlock {Get-Mailbox "Firstname Middleinitial. Lastname"}
}
}
Run Code Online (Sandbox Code Playgroud)
我定义了两个内联脚本,因为我想设置一次远程会话,然后并行调用Get-Mailbox命令以加快进程.以下是我希望工作流程看起来像的示例.
Workflow Get-MailboxStatisticsParallel{
param ($o365cred, $mailboxes)
$session = InlineScript {
New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $using:o365cred -Authentication Basic -AllowRedirection
}
ForEach -Parallel ($mailbox in $mailboxes){
InlineScript {
Invoke-Command -Session $using:session -ScriptBlock {param ($mailbox); Get-MailboxStatistics $mailbox.UserPrincipalName} -ArgumentList $mailbox
}
}
}
Run Code Online (Sandbox Code Playgroud)
示例运行将如下所示.
$cred = Get-Credential …Run Code Online (Sandbox Code Playgroud) powershell workflow powershell-remoting office365 powershell-3.0