

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# マップサーバーメッセージブロック (SMB) ネットワークドライブ
<a name="map-smb-network-drives"></a>

SMB のターゲットネットワーク下にある任意のマシンを使用できます。セッションスクリプトを使用して設定する場合は、まず、ユーザーがログオンしたときに呼び出されるスクリプトを作成する必要があります。セッションスクリプトはイメージごとに設定されます。

サーバーメッセージブロック (SMB) ネットワークドライブをマッピングするには、次の手順を実行します。

## ステップ 1: サービスが実行されていることを確認する
<a name="smb-start"></a>

スタートメニューから **[services.msc]** を開き、次のサービスがすべて実行されていることを確認します。
+ DNS クライアント
+ 関数検出リソースの発行
+ SSDP 検出
+ UPnP デバイスホスト

## ステップ 2: SMB フォルダを作成する
<a name="create-smb-server-manager"></a>

ファイルエクスプローラーを使用して SMB を作成できます。

**ファイルエクスプローラーを使用して SMB 共有フォルダを設定するには**

1. SMB フォルダを右クリックし、**[プロパティ]**、**[共有]** を選択します。

1. **[高度な共有]** を選択します。

1. **[高度な共有]** で、**[このフォルダを共有]** をチェックし、**[アクセス許可]** を選択します。

1. すべてのユーザーにアクセス許可を付与する場合は、デフォルト設定のままにします。

   特定のユーザーを追加する場合は、**[アクセス許可の共有]** で、**[全員]**、**[削除]** を選択します。次に、**[追加]** を選択し、ファイル共有にアクセスするユーザーまたはグループを入力します。

   追加するユーザーまたはグループごとに、**[許可]** を選択して、**[フルコントロール]**、**[変更]**、または **[読み取りアクセス許可]** を割り当てます。

1. **[適用]**、**[OK]**、**[OK]**、**[閉じる]** を選択します。

## ステップ 3: SMB がドメイン内でアクセス可能であることを確認する
<a name="verify-smb"></a>

同じセキュリティグループを使用し、同じドメインに結合する別のサーバーからファイルエクスプローラーを開きます。ネットワークパスフォルダに移動して、提供されたネットワークパス経由でネットワーク共有にアクセスします。**[プロパティ]**、**[共有]**、**[ネットワークパス]** を選択します。

## ステップ 4: ユーザーがローカル/ドメイングループポリシーからシンボリックリンクを作成できるようにする
<a name="enable-smlink-smb"></a>

ユーザーのローカル/ドメイングループポリシーからのシンボリックリンクの作成を有効にして、グループポリシーで定義されているセッションスクリプトまたはログオンスクリプトを確認します。これにより、ユーザーアクセス許可を持つスクリプトをステップ 5 で作成できます。

**ユーザーがローカル/ドメイングループポリシーからシンボリックリンクを作成できるようにするには**

1. このポリシーの定義に使用される GPO では、**[コンピュータ設定]**、**[Windows 設定]**、**[セキュリティ設定]**、**[ユーザー権限の割り当て]**、**[ポリシー]**、**[シンボリックリンクの作成]** を選択します。次に、追加するユーザーのアクセス許可を更新します。シンボリックリンクの作成の詳細については、「[Create symbolic links](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/create-symbolic-links)」を参照してください。

1. デフォルトでは、リモートからリモートへの (例えば、別の同様のシンボリックリンク内のネットワーク共有へのシンボリックリンクマッピング) およびリモートからローカルへの (例えば、シンボリックリンクからネットワーク共有へのシンボリックリンクマッピング) アクセスは無効になっています。シンボリックリンクマッピングが必要な場合は、以下のコマンドを実行します。
   + リモートからリモートへのアクセスを有効にする場合 - `fsutil behavior set SymlinkEvaluation R2R:1`
   + リモートからローカルへのアクセスを有効にする場合 - `fsutil behavior set SymlinkEvaluation R2L:1 `

## ステップ 5: ユーザーがログオンしたときに呼び出されるスクリプトを作成する
<a name="create-script-smb"></a>

WorkSpaces Applications セッションスクリプトまたは GPO ログオンスクリプトを使用して、ユーザーがログオンしたときに呼び出されるスクリプトを作成します。WorkSpaces Applications セッションスクリプトを使用することを選択した場合、セッションスクリプトはその特定の WorkSpaces Applications イメージにのみ適用されます。GPO ログオンスクリプトを使用する場合、GPO はドメイン/OU に適用され、フリートに設定できます。これにより、所有するすべてのイメージにスクリプトを設定する必要はありません。

### オプション 1: セッションスクリプトを使用して SMB 共有フォルダをマイファイルにマウントする (Powershell を使用)
<a name="powershell-smb"></a>

**セッションスクリプトを使用して SMB 共有フォルダをマイファイルにマウントするには (Powershell を使用)**

1. ユーザーアクセス許可を正常に定義したら、ユーザーコンテキストまたはシステムコンテキストを使用して次のサンプルスクリプトを設定します。

   ユーザーコンテキストを使用する config.json スクリプトの例を次に示します。

   ```
   "SessionStart": {
       "executables": [
       {
           "context": "system",
           "filename": "",
           "arguments": "",
           "s3LogEnabled": true
       },
       {
           "context": "user",
           "filename": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
           "arguments": "-File \"C:\\AppStream\\SessionScripts\\userStart.ps1\"",
           "s3LogEnabled": true
       }
    ],
   "waitingTime": 30
   ```

   以下は、システムコンテキストを使用するスクリプトの例です。

   ```
   "SessionStart": {
       "executables": [
       {
           "context": "system",
           "filename": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
           "arguments": "-File \"C:\\AppStream\\SessionScripts\\systemStart.ps1\"",
           "s3LogEnabled": true
       },
       {
           "context": "user",
           "filename": "",
           "arguments": "",
           "s3LogEnabled": true
       }
    ],
   "waitingTime": 30
   ```

1. マルチセッションフリートを使用している場合は、システム環境変数 `$env:AppStream_Session_UserName` を使用してユーザーのマイファイルフォルダに移動できます。これにより、システムコンテキスト `$env:USERNAME` を使用する際に、ユーザー名の代わりに `Admin` にマッピングできます。

   ```
   # Define the target application path
   $targetPathes = "<SMB-PATH>"
   
   # Define the shortcut location
   $symlinkLocation = "C:\Users\$Env:AppStream_Session_UserName\My Files\Custom Folder"
   
   # Create the junction for Custom Home Folder under MyFiles
   New-Item -ItemType SymbolicLink -Path $symlinkLocation -Target $targetPaths
   ```

### オプション 2: GPO ログオンスクリプトを使用して SMB 共有フォルダをマイファイルの下にマウントする
<a name="powershell-gpo-logon"></a>

1. ファイルまたはフォルダにシンボリックリンクを作成して、SMB 共有フォルダをマウントします。詳細については、「[例 7: ファイルまたはフォルダへのシンボリックリンクを作成する](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.                                         management/new-item?view=powershell-7.4#example-7-create-a-symbolic-link-to-a-file-or-folder)」を参照してください。

1. [ユーザーログオンスクリプトを割り当てます。](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-                                 2012-r2-and-2012/dn789196(v=ws.11)#how-to-assign-user-logon-scripts)

1. 次のスクリプトを追加して、マイファイルの下にカスタムホームフォルダのジャンクションを作成します。

   ```
   # Define the target application path
   $targetPathes = "<SMB-PATH>"
   
   # Define the shortcut location
   $symlinkLocation = "C:\Users\$env:Username\My Files\Custom Folder"
   
   # Create the junction for Custom Home Folder under MyFiles
   New-Item -ItemType SymbolicLink -Path $symlinkLocation -Target $targetPaths
   ```

   Windows Server 2022 イメージを使用している場合、ログオンスクリプトが正常に完了するまでマイファイルフォルダが作成されない問題が発生する可能性があります。これにより、SMB マウントオペレーションがログオンスクリプトを介して実行されるとタイムアウトが発生する可能性があります。この問題を解決するには、SMB もマウントしながら、以下を実行してログオンスクリプトを使用して独立したプロセス (`Start-Process`) をトリガーします。

   1. ログオンスクリプトを作成します。

      ```
      # Define the log file path
      $logFilePath = "<This-is-where-your-log-files-are-saved>"
      
      # Function to write log messages
      function Write-Log {
          param (
              [string]$message
          )
          $timestamp = get-date -format "yyyy-MM-dd HH:mm:ss"
          $logMessage = "$timestamp - $message"
          $logMessage | Out-File -FilePath $logFilePath -Append -Encoding UTF8
      }
      
      try {
          Write-Log "Setting execution policy..."
          Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force
          Write-Log "Unblocking logon script file..."
          $filePath = "<This-is-where-your-actual-logon-script-is-linked>"
          Unblock-File -Path $filePath
          Write-Log "Running actual logon script..."
          Start-Process -FilePath 'Powershell.exe' -ArgumentList "-File `"$filePath`""
      } catch {
          Write-Log "An error occurred: $_" "ERROR"
      }
      ```

   1. 必要に応じて、グループポリシーを使用して、このログオンスクリプトの遅延設定を更新します。詳細については、「[ログオン スクリプトの遅延を構成する](https://admx.help/?Category=Windows_8.1_2012R2&Policy=Microsoft.Policies.GroupPolicy::LogonScriptDelay)」を参照してください。ログオンスクリプトの遅延時間は、非同期ログオンスクリプトをトリガーするまでの遅延時間です。デフォルトの遅延は 5 分です。

   1. フリートを再起動して、ログオンスクリプトの遅延を適用します。