可以将connect-sposervice与appId和app secret一起使用吗?

时间:2019-01-17 16:14:01

标签: powershell sharepoint sharepoint-online

是否可以将Connect-SPOService cmdlet与应用程序标识符和密码一起使用?我需要在azure函数中获取有关网站集的信息,这些信息只能通过get-sposite cmdlet获得。

我正在尝试设置一个Azure功能,该功能使用SharePoint Online PowerShell模块来报告所有启用了外部共享的网站集。 由于我不想在此Azure功能中包括我的个人凭据,因此我在Azure AD中设置了应用程序标识符。 我可以将此应用程序ID与PnP Cmdlet(connect-pnponline -appid ...)一起使用,但是pnp命令get-pnpsite不会返回所需的详细信息。

下面是pnp框架的代码,其中所有Sharing *属性均为空。

Connect-PnPOnline -AppId $appid -AppSecret $appsecret -Url $adminUrl

$content = @()
Get-PnPTenantSite -Filter "Url -notlike ""*/personal*""" | ? {$_.SharingCapability -ne "Disabled" } | % {
    $connection = Connect-PnPOnline -ReturnConnection -Url $_.url -AppId $AppId -AppSecret $AppSecret
    $site = Get-PnPSite -Connection $connection; 
    $content += @{
        title= $site.Title; 
        url=$site.Url; 
        owner=$site.Owner; 
        SharingCapability=$site.SharingCapability; 
        SharingDomainRestrictionMode=$site.SharingDomainRestrictionMode; 
        SharingAllowedDomainList=$site.SharingAllowedDomainList; 
        SharingBlockedDomainList=$site.SharingBlockedDomainList}
}

此代码有效,但需要实际的用户凭据:

param (
    # Parameter help description
    [Parameter(Mandatory=$true)]
    [string]$TenantName,
    # Parameter help description
    [Parameter(Mandatory=$true)]
    [string]$DestinationPath
)

$dateStr = Get-Date -Format yyyy-MM-dd_HH-mm-ss
$filename = "ExternalSharingReport_$dateStr.csv"
$content = @()

$adminUrl = "https://$TenantName-admin.sharepoint.com"
Connect-SPOService -Url $adminUrl

$content += "Title; Url; Owner; SharingCapability; SharingDomainRestrictionMode; SharingAllowedDomainList; SharingBlockedDomainList"
Get-SpoSite | ? {$_.Url -notlike "*/personal*" -AND $_.SharingCapability -ne "Disabled" } | % {
    $site = Get-SPOSite $_.url; 
    $content += "$($site.Title); $($site.Url); $($site.Owner); $($site.SharingCapability); $($site.SharingDomainRestrictionMode); $($site.SharingAllowedDomainList); $($site.SharingBlockedDomainList)"
}
$completPath = Join-Path -Path $DestinationPath -ChildPath $filename
$content > $completPath

我希望能够使用默认的cmdlet,如下所示: Connect-SPOService $adminUrl -AppId $appId -AppSecret $appSecret

1 个答案:

答案 0 :(得分:0)

您必须向该应用授予权限。

网站集级别或租户级别。

网站集级别的授予权限:

  1. 打开https://yourtenant.sharepoint.com/sites/yoursite/_layouts/15/appinv.aspx
  2. 在第一个字段中粘贴您的客户ID,然后单击“查找”。它应该自动填充其他字段
  3. 在后面的字段中粘贴应用程序许可请求。根据您要授予的许可,它可能会有所不同。不要忘记授予AppOnly身份验证。例如:对网站集的完全信任:
<AppPermissionRequests AllowAppOnlyPolicy="true">    
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />    
</AppPermissionRequests> 

授予租户级别

  1. 与上述相同,但使用的是https://yourtenant-admin.sharepoint.com/_layouts/15/appinv.aspx
  2. 整个租户请求中的完全控制权是:
<AppPermissionRequests AllowAppOnlyPolicy="true">    
  <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />   
</AppPermissionRequests>