将PowerShell变量传递给Docker命令

将PowerShell变量传递给Docker命令,powershell,docker,containers,Powershell,Docker,Containers,我想编写Docker容器的管理脚本,但我发现很难将PS变量传递给Docker命令,特别是由于路径格式的差异 下面的行(*)和您可以找到的类似项可以工作,但不方便: Start-Process docker " run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data" 实际上,PSStart Process非常适合MSI安装程序,您需要查看弹出窗口并控制其可见性级别,以便了解静默安装程序正在运行。相反,您不希

我想编写Docker容器的管理脚本,但我发现很难将PS变量传递给Docker命令,特别是由于路径格式的差异

下面的行(*)和您可以找到的类似项可以工作,但不方便:

Start-Process docker " run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data"
实际上,PS
Start Process
非常适合MSI安装程序,您需要查看弹出窗口并控制其可见性级别,以便了解静默安装程序正在运行。相反,您不希望每次运行控制台应用程序时都启动一个新窗口,尤其是在Docker中,在Docker中,您可以与调用者和被调用的shell进行来回交互

对。但是,我尝试了以下方面,但没有成功:

& docker run --rm -v $($env:USERPROFILE -replace '\\','/'):/data alpine ls /data
Cmd.exe
可能会让事情变得更简单,但PowerShell是与之交互的官方shell。因此,应该有一种可靠的方法将变量参数传递给Docker命令

(*)移除开关
-rm
在这里仅用于试验答案,以避免弄乱您的工作区。当然,我通常不会在创建容器时立即销毁它,而是通过
-ti
与它交互

编辑

@AnsgarWiechers在评论中提出:

$params = 'run',  '--rm', "-v $($env:USERPROFILE -replace '\\','/'):/data", 'alpine', 'ls /data'
docker  @params
假设我正确地实施了它,它也不起作用,并给出:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: invalid mode: /data.        
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.                                        

不需要参数设置,甚至不需要呼叫操作员,双引号解决了以下问题:

docker run --rm -v "$($env:USERPROFILE -replace '\\','/'):/data" alpine ls /data

如果他询问路径上的差异:
/
vs
\
@4c74356b41使用call操作符和splatting而不是尝试将内容放入
启动过程中时,传递变量和参数处理通常要容易得多。好吧,但他不是这样要求的@AnsgarWiechers可能没有要求这样做,但我非常确定这是解决他的问题的实际解决方案。@AnsgarWiechers:OP there要求一个同步启动多个MSI进程的解决方案。人们不想与静默的MSI安装程序交互,因此
启动进程
是可以的,它的弹出窗口甚至可以帮助捕获错误。我建议自己
启动流程
方法“有效”,但明确表示“不方便”。您的控制台方法不是OP所要求的,并明确解释了为什么需要
启动流程
解决方案。因此,那些寻找不基于
启动流程的解决方案的人不会去那里寻找,而那些愿意回答的人也不太可能去发布。