1

docsによると、 AWS IAM ロールにアクセスするには、コンテナを実行するときに次の PShell スクリプトを実行する必要があります。

$gateway = (Get-WMIObject -Class Win32_IP4RouteTable | Where { $_.Destination -eq '0.0.0.0' -and $_.Mask -eq '0.0.0.0' } | Sort-Object Metric1 | Select NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway

ただし、例外がスローされます。

Get-WMIObject : 「Get-WMIObject」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。

いくつかのグーグルは、コマンドレットが に置き換えられたことを示唆しているGet-CimInstanceようです.これは実際には少なくともスクリプトの3行目に進んでいるように見えますが、その後:

New-NetRoute : パラメータ 'InterfaceIndex' で引数の変換を処理できません。型 "System.Object[]" の "System.Object[]" 値を型 "System.UInt32" に変換できません。

の値$ifIndexは配列[7,19]です。

私の Dockerfile:

FROM microsoft/dotnet:2.0-sdk AS build-env
WORKDIR /app

COPY ./ ./
RUN dotnet publish project/project.csproj -c Release -r win-x64 -o out

FROM microsoft/nanoserver:sac2016
WORKDIR /app
COPY --from=build-env /app/project/out ./
COPY --from=build-env /app/startProject.ps1 ./

ENTRYPOINT ["powershell", ".\\startProject.ps1"]

startProject.ps1 の完全な内容:

$gateway = (Get-CimInstance -Class Win32_IP4RouteTable | Where-Object { $_.Destination -eq '0.0.0.0' -and $_.Mask -eq '0.0.0.0' } | Sort-Object Metric1 | Select-Object NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select-Object ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway

$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Start-Process "$scriptDir\Project.exe" -Wait

編集

実際、私が話すのが早すぎたようです - を使用Get-CimInstanceするとエラーが返されます:

Get-CimInstance : 無効なクラス

見つからないことを示唆しているようですWin32_IP4RouteTable

4

0 に答える 0