Zol*_*tán 5 powershell sharepoint
我在PowerShell中创建了一个自定义对象。我能够解决我想解决的问题。我想要一个包含两列的对象,一列用于网站集,一列用于电子邮件。
但是,我想知道是否有更简单的解决方案。你有什么建议吗?
这是我的代码:
$cred = Get-Credential
Connect-PnPOnline "https://tenant.sharepoint.com" -Credentials $cred
$SiteCollections = Get-PnPTenantSite
$object = @()
foreach ($SiteCollection in $SiteCollections) {
Connect-PnPOnline -Url $SiteCollection.Url -Credentials $cred
$email = Get-PnPRequestAccessEmails
Write-Host "Email for $($SiteCollection.Url): $($email)"
$obj = New-Object System.Object
$obj | Add-Member -type NoteProperty -name Url -value $SiteCollection.Url
$obj | Add-Member -type NoteProperty -name Email -value $email
$object += $obj
}
Write-Output $object
Run Code Online (Sandbox Code Playgroud)
可以使用New-Object
cmdlet 从哈希表构造对象:
$obj = New-Object -Type PSObject -Property @{
'Url' = $SiteCollection.Url
'Email' = $email
}
Run Code Online (Sandbox Code Playgroud)
或(如果您具有PowerShell v3或更高版本)[PSCustomObject]
类型加速器:
$obj = [PSCustomObject]@{
'Url' = $SiteCollection.Url
'Email' = $email
}
Run Code Online (Sandbox Code Playgroud)
同样,您可以简单地在循环内部输出对象,并将整个循环输出收集在一个变量中,如下所示:
$object = @(foreach ($SiteCollection in $SiteCollections) {
...
New-Object -Type PSObject -Property @{
'Url' = $SiteCollection.Url
'Email' = $email
}
})
Run Code Online (Sandbox Code Playgroud)
循环@()
周围的数组子表达式运算符()foreach
确保结果是一个数组,即使循环输出少于2个对象也是如此。
使用计算的属性将是另一种选择:
$object = @(Get-PnPTenantSite | Select-Object Url, @{n='Email';e={
Connect-PnPOnline -Url $_.Url -Credentials $cred | Out-Null
Get-PnPRequestAccessEmails
}})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1833 次 |
最近记录: |