PowerShell-Skriptbeispiel mit Cloudlink REST API
Summary: Diese Datei dient nur zu Bildungs-/Informationszwecken. Kann als Referenz beim Schreiben von Cloudlink-Automatisierungsskripten mit PowerShell-Skriptsprache verwendet werden. Dell übernimmt keine Verantwortung dafür, dass diese Datei als PowerShell-Skript in der Umgebung des Dell Kunden ausgeführt wird. Das Skript zeigt eine Möglichkeit, bei Cloudlink registrierte Maschinen und ihre Laufwerke aus einem PowerShell-Skript mit Cloudlink RestAPI-Aufrufen aufzulisten. Das Skript ändert nicht den Status eines Systems, sondern zeigt nur Informationen an. Der Zugriff auf den Cloudlink-Node (angegeben durch die IP-Adresse) wird mit den Zugangsdaten eines Cloudlink-Nutzers vom Typ "client" gewährt. ...
Symptoms
Das Skript kann verwendet werden, um Cloudlink-Vorgänge zu automatisieren. In diesem Beispiel listet das Skript Maschinen auf, die bei CloudLink Center registriert sind.
Cause
Das Skript kann für Kunden nützlich sein, die über mehrere Cloudlink Center verfügen oder ihr Cloudlink Center mithilfe eines PowerShell-Skripts verwalten möchten.
Resolution
# Copyright Dell © 2021, 2022
# Diese Datei dient ausschließlich Bildungs-/Informationszwecken.
# Kann als Referenz beim Schreiben von Cloudlink-Automatisierungsskripten mit PowerShell-Skriptsprache verwendet werden.
# Dell übernimmt keine Verantwortung dafür, dass diese Datei als PowerShell-Skript in der Umgebung des Dell Kunden ausgeführt wird.
# Das Skript zeigt eine Möglichkeit, bei Cloudlink registrierte Maschinen und ihre Laufwerke aus einem PowerShell-Skript mit Cloudlink RestAPI-Aufrufen aufzulisten.
# Das Skript ändert nicht den Status eines Systems, sondern zeigt nur Informationen an.
# Der Zugriff auf den Cloudlink-Node (angegeben durch die IP-Adresse) wird mit den Zugangsdaten eines Cloudlink-Nutzers vom Typ "client" gewährt.
# Der folgende Teil simuliert die Zertifikatsvalidierung, das Zertifikat ist immer gültig.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
{
$certCallback = @"
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
public class ServerCertificateValidationCallback
{
public static void Ignore()
{
if(ServicePointManager.ServerCertificateValidationCallback ==null)
{
ServicePointManager.ServerCertificateValidationCallback +=
delegate
(
Object obj,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors errors
)
{
return true;
};
}
}
}
"@
Add-Type $certCallback
}
[ServerCertificateValidationCallback]::Ignore()
$server='<cloudlink node ip>'
$client_id='<client id>'
$client_secret='<client secret>'
if ($args[0] -ne $null)
{ $server=$args[0] }
if ($args[1] -ne $null)
{ $client_id=$args[1] }
if ($args[2] -ne $null)
{ $client_secret=$args[2] }
$serverport=$server+":443"
Write-Output "parameters: server=$server, client_id=$client_id, client_secret=$client_secret"
$responsee=Invoke-RestMethod -Uri "https://$server/cloudlink/oauth/token?grant_type=client_credentials&client_id=$client_id&client_secret=$client_secret&scope=all" -Method Get -TimeoutSec 1800
Write-Output "The response received:"
Write-Output "$responsee"
if($responsee.access_token)
{
$mytoken=$responsee.access_token
$Type = "application/json"
$resolveSessionHeader = @{'Authorization' = "Bearer $mytoken"}
# Abfrage für die Maschinenliste
$machine_list_query='https://$serverport/cloudlink/rest/securevm' $machine_list=Invoke-WebRequest -Method Get -Uri $machine_list_query -Headers $resolveSessionHeader -ContentType $Type
# Listet die Maschinen auf der Konsole auf.
Write-Host "Machine list:" -ForegroundColor Yellow $machine_list_txt = $machine_list | ConvertFrom-Json $machine_list_txt | FT
Listen Sie #For jedem Computer die Laufwerke auf.
foreach ($machine in $machine_list_txt)
{
$drives_list = $($machine.resources)
Write-Host "$($machine.name) $($machine.ip_address) ($($machine.os_name)) group $($machine.group)" -ForegroundColor Yellow
$drives_list | FT
}
}