我需要对100的邮箱运行并行搜索-邮箱cmdlet来删除内容,但是它们首先需要符合某些参数,比如启用了某些CAS协议,并提供了一个转发地址。我还对其进行了参数化,以便将一个$maxJobCount int传递给它,以便运行者可以指定并发运行的作业的最大数量,以便考虑到其机器上的资源。
得到的东西工作,然后得到启动-作业组件,这是一个相当简单的功能。
function _StartJob {
param (
$mailAddress
)
Start-Job -Name $mailAddress -Scriptblock {
Get-EXOMailbox $mailAddress -PropertySets Delivery
}
}这是返回一个错误,说明在使用cmdlet之前我需要运行,这是我在Start中了解到脚本块的地方-作业实际上是新的PowerShell.exe进程,所以不要继承模块和会话选项。
有没有人知道解决这个问题的更简单的方法?在MFA环境中,它要么意味着坐在那里粘贴密码几百次,要么说服变更板和Secops部门允许我设置一个具有删除权限的图形应用程序.都很痛苦
谢谢你的建议
发布于 2022-09-28 16:50:59
你只要把书签放进你想要的地方就行。
$kvCertName = 'Cert'
#I am using azure automation here to get the cert its different for keyvault
$kvCertPFX = Get-AutomationCertificate -Name $kvCertName
$tenantid = 'yourcompany.onmicrosoft.com'
$appid = '00000000-46da-6666-5555-33333cfe77ec'
$startDate = ([datetime]::Today).AddDays(-7)
#Build the script block
$block = {
Param(
$kvCert,
$appID,
$tenantID,
$n,
$startdate
)
$newCertPFX = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($kvCert)
Connect-ExchangeOnline -Certificate ([System.Security.Cryptography.X509Certificates.X509Certificate2]$newCertPFX) -AppID $appID -Organization $tenantID -ErrorAction Stop
Search-AdminAuditLog -StartDate $startDate.adddays($n) -EndDate $($startDate.AddDays($n) | get-date -Hour 23 -Minute 59 -Second 59) -ExternalAccess:$false -ResultSize 250000
Disconnect-ExchangeOnline -confirm:$false
}
#Remove all jobs created
Get-Job | Remove-Job
#Run All the Parrallel Jobs
$num = 0..6
$kvCert = $kvCertPFX.Export(3)
foreach($n in $num){Start-Job -Scriptblock $Block -ArgumentList @($kvCert,$appID,$tenantid,$n,$startdate)}
#Wait for all jobs to finish.
do {start-sleep 1}
until ($(Get-Job -State Running).count -eq 0)
#Get information from each job.
$adminPowerShellAuditLog = $null
foreach($job in Get-Job){$adminPowerShellAuditLog+= Receive-Job -Id ($job.Id)}
Write-Output $adminPowerShellAuditLoghttps://stackoverflow.com/questions/71805548
复制相似问题