PC」カテゴリーアーカイブ

SharePoint OnlineをPowerShellで操作してみる

SharePoint OnlineをPowerShellで操作する方法はいくつかあるけれど、Invoke-Webrequestを使わずやってみる。

1. Entra IDからアプリの登録

バッチ処理が前提のため、まずEntra IDからSharePoint Online操作用のアプリを登録する。

■ 必要な設定項目のみ抜粋

[構成されたアクセス許可]

・Microsoft Graphから「アプリケーションの許可」

・Files.ReadWrite.All

・Sites.Read.All

[証明書とシークレット]

自己証明書の作成とThumbprintの取得

$certname = "spo-test"
$crt = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256 -NotAfter(Get-Date).AddYears(20)
$crt | select Thumbprint

先の手順で作成した証明書をアップロード

2. SharePoint Onlineにファイルをアップロード

実際にPowerShellを使ってSharePoint Onlineにファイルをアップロードしてみる。

例)サイト名:テストサイトのドキュメントにあるテストフォルダにローカルのhoge.txtファイルをアップロード

$uploadFile = "C:\folder\hoge.txt"
$fileName = "hoge.txt"

try {
    Connect-MgGraph -ClientId "先の手順で作成したアプリ登録のClient ID" -CertificateThumbprint "先の手順で取得したThumbprint" -NoWelcome
    Write-Host "[Info] SPOに接続しました"
} catch {
    Write-Host "[Error] SPOに接続できませんでした"
    exit
}
$SiteID = Get-MgSite -Search "テストサイト" | Select-Object -ExpandProperty Id
$driveID = (Get-MgSiteDrive -SiteId $siteID | Where-Object {$_.Name -eq "ドキュメント"}).Id

$documentDriveItemID = (Get-MgDriveItemChild -DriveId $driveID -DriveItemId "root" | Where-Object {$_.Name -eq "ドキュメント"}).Id
$uploadFolderID = (Get-MgDriveItemChild -DriveId $driveID -DriveItemId $documentDriveItemID | Where-Object {$_.Name -eq "テストフォルダ"}).Id
$driveItemID = $uploadFolderID+":/"+$fileName+":"
try {
    Set-MgDriveItemContent -DriveId $driveID -DriveItemId $driveItemID -InFile $uploadFile
} catch {
    Write-Host "[Error] SPOにアップロードできませんでした"
}
Disconnect-MgGraph

3. はまりどころ

Set-MgDriveItemContentのリファレンスマニュアルの説明が少なすぎて使い方がわからなかった…

https://learn.microsoft.com/ja-jp/powershell/module/microsoft.graph.files/set-mgdriveitemcontent?view=graph-powershell-1.0

DriveItemIdの引数、素直に考えるとそのままDriveItem IDを入力すればよいと思いきや、それだとダメ

実際のところは…

DriveItem ID+ “:/”+アップロードする際の任意のファイル名+”:”

こんなのわからないって…

Microserver Gen10 Plus v2購入

10年近く使い続けてきたMicroserver Gen8。動いていたOSもWindows Server 2012R2とEOSLなのでこの機会にハードウェアごと一新しようと思い、Microserver Gen10 Plus v2を購入。

構成

定番のHPEの箱。構成は最小モデル。どのみち中身を換装するので…

換装パーツはXeon E2336とメモリ64GB(32Gx2)。

ちょうどGen11が販売され始めた時期だけど、Gen10のチップセットはC252なのでこのパーツ構成。なお、Xeon E-2336なのはCPUの冷却がヒートシンクだけので、TDP65Wで収まるもので最上位という理由。

ストレージは写真を撮り忘れたので格納後。

SSDx2、HDDx2。SSDはMicroserver Gen10用専用マウントケージを使用。なくても適当な汎用ケージで問題ないことは確認済。HDDはそのまま取付。ただし、専用品ではないので差し込む際、コネクタの位置合わせにちょっと手こずる。また、取り外す際、青色のレバーを使えない。

起動ドライブはSSD USBメモリ。

これらのパーツを取付。

Gen8と同様に背面からボードを引き抜いて作業できるので作業性はよい。

なお、SSD USBメモリには汎用のヒートシンクを取付。

ベンチマーク

せっかくなのでCPUのベンチマーク。OSはWindows Server 2022。

まずは初期で乗っていたPentium Gold G6405のシングルコアをCINEBENCHで計測。

Pentium Gold G6405のマルチコア。

つづいてXeon E-2336のシングルコア。

Xeon E-2336のマルチコア。

さすがに比べ物にならない…

C262チップセットだと起動ドライブにNVMeを使えたりとより各パフォーマンスはさらに向上するけど、まぁ、通常利用だと特に不満はなし。

最後にMicroserver Gen8との対比。

Microserver Gen8の半分のサイズ!

ACアダプタ駆動だし”一般”のご家庭に設置できるレベルです。

Windows Server2022のWSL2はミラーモードもブリッジモードもサポートしていない

タイトルがすべてだけど、2024年2月現在、Windows Server 2022の下記バージョンのWSL2はミラーモードもブリッジモードもDNSトンネリングもサポートしてません…

現状、細かいことをしたいなら素直にWindows 11ないし素のLinuxを使えという話ですね。

$ uname -r
5.15.133.1-microsoft-standard-WSL2

ミラーモード

[wsl2]
networkingMode=mirrored
dnsTunneling=true

wsl: ミラー化されたネットワーク モードはサポートされていません。NAT ネットワークにフォールバックします
wsl: DNS トンネリングはサポートされていません

ブリッジモード

[wsl2]
networkingMode=bridged
vmSwitch=External
dhcp=true

wsl
ネットワークを構成できませんでした (networkingMode Bridged)。ネットワークを無効にするには、C:\Users\username\.wslconfigで 'wsl2.networkingMode=None' を設定します
Error code: Wsl/Service/CreateInstance/CreateVm/ConfigureNetworking/HCS/0x8037010d

Windows Server 2022が起動しなくなった

ディスクのパフォーマンステストをして、いろいろとディスク交換していたら突如、Windowsが起動しなくなってしまった。

SATAコントローラのPort3,4のディスク交換だと問題なかったのに、Port1,2を変えた途端

これですよ(涙

いろいろと格闘してみるも、この時点では原因を完全につかみ切れなく、面倒になって、クリーンインストールすることに。

ところが、クリーンインストールをしようとしたところ…

Port5に挿したSSDしか認識していない。この状態で「Next」を押しても上記の通り、new partionを作成できない旨の警告が出て先に進めず。

ここからは推測だけど

  • ディスクをPoolにするとインストールドライブとして認識されず、使用できなくなる
  • Microserver Gen8でPort5を使用してWindowsをインストールした場合Port1~4のどこかにブートローダが保存される(Port1?)

以上のあたりをつけて、Windows 11でPoolとして作成したディスクをUSB接続し、いったんPoolを削除。

4本がんばって削除…

無事、インストール画面でディスクが見えた。と同時に各ディスクにMSR領域がちゃんと確保されていることを確認(なのに、なぜ起動できなかった???)

 ⇒ このMSR領域はPoolのためのものではないかと推測

すっきりさせた状態でインストール。

Windows Server 2022をインストール後にディスク管理を見てみると…

予想通り、ディスク0(Port1)の先頭にブートローダらしきものが書き込まれてる!

ということで、突然Windows 2022が起動しなくなったのは元々Port1に挿していたHDDを新しいHDDに入れ替えたことで、ブートローダが消えちゃった為ということがほぼ判明…

つまり、同時にMicroserver Gen8でPort5にSSDを挿してWindowsをインストールする場合はPort1にディスクを挿しておく必要があり(正確にはPort5だけだったらそれでもokですが、普通Port1~4を使わないという選択肢はないですよね…)、Port1のディスクを抜くとブートローダを見失うので、OSが起動しなくなるというわけか。

これって、MicoroServer Gen8の運用でよく見られるUSBメモリにブートローダを入れて、そこからシステムが入ったディスクを読みに行かせるテクニック以外にも、Port1の先頭にブートローダ領域を作ってやり、そこにブートローダを突っ込むことでLinux等も運用できるのではないかということでもあるよね…(検証はしませんが)

これで一件落着と思いきや、よく見たら

ディスク0、MBRで2TBしか認識してない(涙

MicroServer Gen8がBIOSにしか対応してないからWindows Server 2022がブートローダ領域を格納するディスク0をGPTではなくMBRで作成したのね…

ということはやはり、Windowsもディスクをフルに使うためにはUSBメモリを挿してそこにブートローダを突っ込むという選択しかなさそう…

まずは筐体内部のUSBポートにUSBメモリを挿入。

もったいないけどこちらを使用。

続いてbcdbootコマンドでブートローダをUSBメモリに書き込み。

bcdboot C:\Windows /s D: /f ALL

書き込まれたことを確認。ここから意図的にPort1のディスクを抜いてUSBメモリでWindowsが起動すれば完璧!(USB Memory KeyのBootを有効に)

無事、起動!!

長旅でした…

仮想ディスクを高速化したい その2

前提

ファイルサーバ:Windows Server 2022 Standard

ベンチマーク実行PC:Windows 11

接続:双方共に10Gbps

前回からの変更点

SSDを追加購入。前回と同じSanDiskのSDSSDH3-2T00-G25

テスト

今回から仮想ディスクを記憶域階層で作成。SSD2台のミラーとHDD2台のミラーを合わせて作成。

ミラー遅い… シンプルに比べたら当然遅いし、パリティに比べても結構遅い。パフォーマンスのSSDがあまり仕事してない?

ちょっとどうしたものかと悩んだあと、ReFSでもテストしてみることに。

ReFSが思ったよりも速い!! これなら十分。

続いて、ライトバックキャッシュを4GBに増やしてどうなるかテスト。

ライトバックキャッシュはGUIからだと1GB固定となり、任意の値を設定できないので、PowerShellから仮想ディスクを作る。

$SSD階層 = New-StorageTier -StoragePoolFriendlyName "Pool" -FriendlyName "SSD_Tier" -MediaType SSD
$HDD階層 = New-StorageTier -StoragePoolFriendlyName "Pool" -FriendlyName "HDD_Tier" -MediaType HDD

New-Volume -StoragePoolFriendlyName "Pool" -FriendlyName "Test" -AccessPath "E:" -ResiliencySettingName "Mirror" -ProvisioningType "Fixed" -StorageTiers $SSD階層,$HDD階層 -StorageTierSizes 190GB,290GB -FileSystem NTFS -WriteCacheSize 4GB
New-Volume -StoragePoolFriendlyName "Pool" -FriendlyName "Test" -AccessPath "E:" -ResiliencySettingName "Mirror" -ProvisioningType "Fixed"

ライトバックキャッシュ1GBと変わりなし…

ReFSでもライトバックキャッシュ増量による恩恵はなさそう。

新機材投入

最初のテストで気になったそもそもHDD遅すぎじゃない?という疑問に対する答えを出すためにHDDも追加で買ってみた。

Western DigitalのWD60EFAX-EC。Red Plusの6TBモデル。もうちょっと大きいサイズでもよかったけどそんなに容量いらないので。

Red Plus速い! NTFSでもなかなかの速度。

続いてReFS。こちらは、ランダム4kのQ32でちょっと良くなったくらいで目立った向上はなし。NTFSに比べると正直、HDDの性能向上による恩恵は少ない感じ。

というわけで、いろいろベンチマークを取った結果、初となるReFSで運用することに決定!

仮想ディスクを高速化したいその1

新規に構築したWindows Server 2022に現行ファイルサーバ(Windows Server 2012 R2)からrobocopyでデータ移行してみたもののどうにも遅い気が…

というわけで、一度ベンチマークを取ってみたところ…

Writeがめちゃくちゃ遅い(涙

というわけでチューニングの旅です。

物理ディスクはクローゼットの中でホコリをかぶっていたWestern DigitalのWD30EZRX 3TBディスク4本。

仮想ディスクの作成は下記のコマンドで実行。

 New-VirtualDisk -StoragePoolFriendlyName "Pool" -FriendlyName "VirtualDisk1" -ResiliencySettingName Parity -Size 20TB -ProvisioningType Thin -NumberOfColumns 4

うーん、上図のとおりWriteが遅い… Thinで作ったから???

ということで固定で作ってみる。

New-VirtualDisk -StoragePoolFriendlyName "Pool" -FriendlyName "VirtualDisk1" -ResiliencySettingName Parity -Size 6TB

全体的に速くなったけど、やっぱりWriteが…

使ってるHDDがイマイチなんだろうか。

というわけで、記憶域階層を試して見ようと思って、SSDを1台だけ購入。1台しかないのでミラーではなくシンプル構成で。なお、追加したSSDはSanDiskのSSDH3-2T00-G25

あと3.5インチ変換に裸族のインナー CRIN2535。こちら、アイネックスのHDD変換マウンタを最初に買ったら、MicroServer Gen8のHDDマウンタに取り付けた際、SATAの差し口が本体と合わなくて使えないという凡ミスをおかして買い直すはめに…

ともあれ結果の方は…

予想通り、速くなった!

チューニングというかもはや物理換装をやってるだけだけど、もう少し続く

http://kururu.dip.jp/blog/?p=4966

Windows Server 2022 日本語化

購入したWindows Server 2022が英語版なので日本語化。

[Time&Language] をクリック

インストール時に日本語キーボードを選択したせいかすでに[Japanese]が用意されていたので[Options]をクリック

Language packを[Download]

元の画面に戻って[日本語]を選択して一度サインアウトすると

無事、ユーザー画面は日本語完了。

続いて管理画面も。

[管理用の言語の設定]をクリック

[設定のコピー(O)]をクリック

[ようこそ画面とシステムアカウント]にチェックを入れて[OK]をクリック

再起動後からようこそ画面も日本語に!

Microserver Gen8にWindows Server 2022をインストール

遅ればせながらようやくWindows Server 2022 Standardを購入したのでMicorserver Gen8にインストールをしてみたところ、すんなりいかなかったので備忘録。

※ 小難しいことをちょっとやりましたが、結果的には何も考えなくインストール可能です

まず、Windows Server 2022もWindows 11同様、購入したDVDインストールメディアからだとUEFI環境必須の模様。

所謂レガシーBIOSしか搭載していないMicroserverでインストールしようとすると下記の通り0x80300024のエラーが表示され、先に進めず。

方法としてはMicroserver Gen8でUEFIを有効にするか、インストールメディアをレガシーBIOS対応のものに作り替えるかの2択かなと思い、前者をちょっと調べるも古い機種だし新しいSystem BIOSもリリースされていないようなので断念。

ということで、Windows Server 2022をRegacy BIOSでインストールする方法を検討。

といっても、まぁ、Windows 11のノウハウがそのまま使えるだろうと思い、RufusでWindows Serverのイメージをゴニョゴニョやってみた。

Rufusの設定は上記の通り。ポイントはイメージオプション、パーティション構成、ターゲットシステムの3点。

できあがったUSBメモリをMicroserver に挿して起動し…

POST画面でF11を選択し…

ブートドライブの選択画面で”3″のUSBドライブキーを選択してやると…

無事ロードに成功!

ここから[次へ(N)] をクリックすると

無事、インストールが進み…

OSの起動に成功!!

というわけで、レガシーBIOSでWindows Server 2022をインストールする手順そのものはクリア。

■ 後日談

購入したDVDディスクはレガシーBIOS版だった…

改めて実行すると…

すんなりインストール出来てしまった。

というわけで、どうやら公式サイトからダウンロードできる体験版はUEFIなのに対し、今回購入したFPP版はBIOSっぽい。

Alexa Skills Kitコマンドラインインターフェースに苦戦中

Alexa Skills Kitコマンドラインインターフェース(ASK CLI)を使おうとしたところ、予想以上に手こずってしまったのでメモ。なお、解決はしてない…

まずは公式手順どおりwindows-build-toolsをインストールできなくてしょんぼり。

■ 使用環境 Windows 11

npm install -g --production windows-build-tools

これを実行すると

Status from the installers:
---------- Visual Studio Build Tools ----------
Still waiting for installer log file...
------------------- Python --------------------
Successfully installed Python 2.7

で止まってしまう。

というわけでvs2015のオプションを追加したところサクッとインストール完了。

npm install -g --production windows-build-tools --vs2015
Downloading BuildTools_Full.exe
[============================================>] 100.0% of 3.29 MB (3.29 MB/s)
Downloaded BuildTools_Full.exe. Saved to C:\Users\hoge\.windows-build-tools\BuildTools_Full.exe.

Starting installation...
Launched installers, now waiting for them to finish.
This will likely take some time - please be patient!

Status from the installers:
---------- Visual Studio Build Tools ----------
Successfully installed Visual Studio Build Tools.
------------------- Python --------------------
Successfully installed Python 2.7

Now configuring the Visual Studio Build Tools and Python...

All done!

+ windows-build-tools@5.2.2
updated 1 package in 44.74s

このあと

npm install -g ask-cli 
ask configure
ask --version
2.24.1

で設定完了。

ここからは本来やりたいスキルマニフェストの修正。

ask smapi get-skill-manifest -s amzn1.ask.skill.xxxxx -g development > skill.json

でマニフェストを取得し修正してアップロード。

ask smapi update-skill-manifest -s amzn1.ask.skill.xxxxx -g development --manifest "file:skill.json"

がServer Error 400であげられない…

"response": {
      "message": "Request is not valid.",
      "violations": [
        {
          "code": "INVALID_REQUEST_PARAMETER",
          "message": "Parsing error due to invalid body.",
          "validationDetails": {
            "originalInstance": {
              "type": "BODY"
            },
            "reason": {
              "type": "MALFORMED_INPUT"
            }
          }
        }
      ]
    }

海外サイトとか見ても同じ罠にはまってる人がいて、解決策としては file: で指定してやれば解決したよーって流れなのにうまくいかず…

file:絶対PATH、相対PATHどっちでも問題ないようだけど、どっちで試してもダメ。”$(type skill.json)” もダメ。

マニフェストファイルはget-skill-manifestで落としてきたものをそのまま書き戻してもダメ。

さて、困った…

Echo Showに連絡先を表示する

Alexaアプリ内に登録した連絡先がEcho ShowやEcho Spotに表示されなくてちょっと悩んだのでメモ。

1.「連絡先を追加」

2.適当に連絡先情報を入力して「保存」

3.登録した連絡先をタップ

4.登録した連絡先を表示し「呼びかけを許可」を有効に

これでEcho Showで登録した連絡先が表示されるように。