如何在 docker 容器中 运行 这个 PowerShell 脚本?
How is it possible to run this PowerShell script inside a docker container?
我正在尝试 运行 在 Windows Docker 容器中执行以下脚本 (myscript.ps1),但实际上没有将脚本文件复制到容器中。
$Source = @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
public static class Imagehlp
{
[DllImport("imagehlp.dll", CharSet = CharSet.Auto)]
public static extern int MapFileAndCheckSum(string Filename, out int HeaderSum, out int CheckSum);
}
"@
Add-Type -TypeDefinition $Source
[int] $headerSum = 0;
[int] $checkSum = 0;
$result = [Imagehlp]::MapFileAndCheckSum(
"C:\Program Files\Internet Explorer\iexplore.exe",
[ref] $headerSum,
[ref] $checkSum
)
if ($result -ne 0) {
Write-Error "Error: $result"
}
$headerSum, $checkSum
首先,我在网上搜索了答案并尝试了中的解决方案,但是,当我尝试给定的解决方案时,出现以下错误。
docker exec my-windows powershell -command "C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1"
C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1 : The term
'C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1' is not
recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.
At line:1 char:1
+ C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\abc...yscript.p
s1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
这个错误的原因可能是因为脚本在主机而不是在容器中。因此,我尝试将脚本内容保存到 PowerShell 中的一个变量中,然后尝试 运行 带有变量的命令。
$script1 = Get-Content ('C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1')
docker exec my-windows powershell -command $script1
这次报错如下
At line:1 char:15
+ $Source = @" using System; using System.Diagnostics; using System.Ru ...
+ ~
No characters are allowed after a here-string header but before the end of the
line.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : UnexpectedCharactersAfterHereStringHeader
它说我的脚本中的 here-string 部分输入不正确,在 @"
之后还有另一个字符,但之后没有字符。我猜这与换行符或回车 return 字符有关,但我不确定。你能帮我么?非常感谢!
为此,我建议利用 powershell.exe
的 -EncodedCommand
switch
# Load script contents from disk
$script1 = Get-Content 'C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1' -Raw
# UTF16LE-encode the script
$bytes = [System.Text.Encoding]::Unicode.GetBytes($script1)
# Convert encoded byte string to b64
$encodedCommand = [Convert]::ToBase64String($bytes)
docker exec my-windows powershell -encodedcommand $encodedCommand
请注意 Windows' 进程 API 将命令行参数的长度限制为 8191 个字符,因此它仅适用于少于 ~3050 个字符(包括空格)的脚本
我正在尝试 运行 在 Windows Docker 容器中执行以下脚本 (myscript.ps1),但实际上没有将脚本文件复制到容器中。
$Source = @"
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
public static class Imagehlp
{
[DllImport("imagehlp.dll", CharSet = CharSet.Auto)]
public static extern int MapFileAndCheckSum(string Filename, out int HeaderSum, out int CheckSum);
}
"@
Add-Type -TypeDefinition $Source
[int] $headerSum = 0;
[int] $checkSum = 0;
$result = [Imagehlp]::MapFileAndCheckSum(
"C:\Program Files\Internet Explorer\iexplore.exe",
[ref] $headerSum,
[ref] $checkSum
)
if ($result -ne 0) {
Write-Error "Error: $result"
}
$headerSum, $checkSum
首先,我在网上搜索了答案并尝试了
docker exec my-windows powershell -command "C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1"
C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1 : The term
'C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1' is not
recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.
At line:1 char:1
+ C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\abc...yscript.p
s1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
这个错误的原因可能是因为脚本在主机而不是在容器中。因此,我尝试将脚本内容保存到 PowerShell 中的一个变量中,然后尝试 运行 带有变量的命令。
$script1 = Get-Content ('C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1')
docker exec my-windows powershell -command $script1
这次报错如下
At line:1 char:15
+ $Source = @" using System; using System.Diagnostics; using System.Ru ...
+ ~
No characters are allowed after a here-string header but before the end of the
line.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : UnexpectedCharactersAfterHereStringHeader
它说我的脚本中的 here-string 部分输入不正确,在 @"
之后还有另一个字符,但之后没有字符。我猜这与换行符或回车 return 字符有关,但我不确定。你能帮我么?非常感谢!
为此,我建议利用 powershell.exe
的 -EncodedCommand
switch
# Load script contents from disk
$script1 = Get-Content 'C:\Users\abc\Desktop\PowerShellScripts\myscript.ps1' -Raw
# UTF16LE-encode the script
$bytes = [System.Text.Encoding]::Unicode.GetBytes($script1)
# Convert encoded byte string to b64
$encodedCommand = [Convert]::ToBase64String($bytes)
docker exec my-windows powershell -encodedcommand $encodedCommand
请注意 Windows' 进程 API 将命令行参数的长度限制为 8191 个字符,因此它仅适用于少于 ~3050 个字符(包括空格)的脚本