В соответствии с документами , мне нужно запустить следующий скрипт PShell при запуске контейнера, чтобы получить доступ к ролям AWS IAM:
$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» не распознается как имя командлета, функции, файла сценария или работоспособной программы.Проверьте правильность написания имени или, если путь был указан, убедитесь, что путь указан правильно, и повторите попытку.
Похоже, что в некоторых поисках Google командлет был заменен на 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