Настройка ядра powershell из ядра.net для предоставления одного диска
Я пытаюсь подготовить один диск в приложении ядра dotnet, используя ядро powershell. Запуск powershell Я смог успешно подготовить один диск из командной строки powershell, следуя инструкциям, приведенным ниже:
https://docs.microsoft.com/en-us/onedrive/pre-provision-accounts
Запуск его программно в ядре.net, однако, похоже, что он использует отдельный PowerShell, встроенный в ядро .net 2.1.
Я полагаю, что неудачные попытки запуска приложения связаны с неправильной настройкой PowerShell, связанной с ядром, а именно с первыми 3 шагами в приведенной выше ссылке:
1. Загрузите последнюю версию командной консоли SharePoint Online.
2. Загрузите и установите пакет клиентских компонентов SharePoint Online.
3. Подключитесь к SharePoint Online в качестве глобального администратора или администратора SharePoint в Office 365. Чтобы узнать, как это сделать, см. Начало работы с командной консолью SharePoint Online.
Как настроить PowerShell, который запускается моим приложением, чтобы отразить эти шаги выше?
Мой код выглядит так:
using System.IO;
using System.Management.Automation;
namespace PowerShellApp
{
class Program
{
public static int Main(string[] args)
{
using (PowerShell ps = PowerShell.Create(
{
ps.AddScript(File.ReadAllText(<scriptLocation>))
.Invoke();
}
}
return 0;
}
}
Как мне выполнить эти шаги при выполнении в ядре приложения.net
Сценарий powershell, который я запускаю, находится ниже, а также по ссылке выше:
<#
.SYNOPSIS
This script adds an entry for each user specified in the input file
into the OneDrive provisioning queue
.DESCRIPTION
This script reads a text file with a line for each user.
Provide the User Principal Name of each user on a new line.
An entry will be made in the OneDrive provisioning queue for each
user up to 200 users.
.EXAMPLE
.\BulkEnqueueOneDriveSite.ps1 -SPOAdminUrl https://contoso- admin.sharepoint.com -InputfilePath C:\users.txt
.PARAMETER SPOAdminUrl
The URL for the SharePoint Admin center
https://contoso-admin.sharepoint.com
.PARAMETER InputFilePath
The path to the input file.
The file must contain 1 to 200 users
C:\users.txt
.NOTES
This script needs to be run by a global or SharePoint administrator in Office 365
This script will prompt for the username and password of the administrator
#>
param
(
#Must be SharePoint Administrator URL
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string] $SPOAdminUrl,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string] $InputFilePath
)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.R untime") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.U serProfiles") | Out-Null
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SPOAdminUrl)
$Users = Get-Content -Path $InputFilePath
if ($Users.Count -eq 0 -or $Users.Count -gt 200)
{
Write-Host $("Unexpected user count: [{0}]" -f $Users.Count) - ForegroundColor Red
return
}
$web = $ctx.Web
Write-Host "Enter an admin username" -ForegroundColor Green
$username = Read-Host
Write-Host "Enter your password" -ForegroundColor Green
$password = Read-Host -AsSecureString
$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username,$password )
$ctx.Load($web)
$ctx.ExecuteQuery()
$loader = [Microsoft.SharePoint.Client.UserProfiles.ProfileLoader]::GetProfileLoader($ctx)
$ctx.ExecuteQuery()
$loader.CreatePersonalSiteEnqueueBulk($Users)
$loader.Context.ExecuteQuery()
Write-Host "Script Completed"
0 ответов
Боюсь, что SP Online Management Shell имеет зависимости от.Net Framework и не будет работать с Core ( отметьте это). С другой стороны, этот модуль казался оберткой поверх их REST API. Поэтому, если вы хотите интегрировать его с основным приложением, вы можете попробовать заменить его HTTP-запросами. Проверьте эту документацию
Также ниже приведен базовый скрипт powershell для работы с этими конечными точками REST API. Я проверил это на своем сайте:
$baseUrl = "http://sharepoint.com/sites/yourSite/_api"
$cred = Get-Credential
# retreive digest
$r = Invoke-WebRequest -Uri "$baseUrl/contextinfo" -Method Post -Credential $cred -SessionVariable sp
$digest = ([xml]$r.content).GetContextWebInformation.FormDigestvalue
# calling endpoint
$endpoint = "sp.userprofiles.profileloader.getprofileloader/getuserprofile"
$head = @{
"Accept" = "application/json;odata=verbose"
"X-RequestDigest" = $digest
}
$re = Invoke-WebRequest -Uri "$baseUrl/$endpoint" -Headers $head -Method Post -WebSession $sp
Write-Host $re.Content
Это фрагмент для createpersonalsiteenqueuebulk, но я не могу проверить его, так как я не администратор домена. Надеюсь, это будет работать для вас
#--- sample 2 (didn't test it since I'm not domain admin). Might need separate session/digest
$endpoint2 = "https://<domain>-admin.sharepoint.com/_api/sp.userprofiles.profileloader.getprofileloader/createpersonalsiteenqueuebulk"
$head = @{
"Accept" = "application/json;odata=verbose"
"X-RequestDigest" = $digest
}
$body = "{ 'emailIDs': ['usera@domain.onmicrosoft.com', 'userb@domain.onmicrosoft.com'] }"
$re2 = Invoke-WebRequest -Uri "$endpoint2" -Headers $head -body $body -Method Post -WebSession $sp
Write-Host $re2.Content