Powershell:使用程序的完整路径和参数将变量传递给ScriptBlock

时间:2017-08-04 13:23:37

标签: powershell

我知道Stackoverflow上有关于此主题的其他问题,但没有一个问题解决了我的问题。我有一个给定程序的完整路径,例子可能是:

  • C:\“Program Files(x86)”\ Lorem \ program1.exe
  • C:\“Program Files”\ Ipsum \ program2.exe

如果我尝试通过C:\"Program Files (x86)"\Lorem\program1.exe /S直接在终端上执行它,它将运行没有问题,但如果我尝试使用我的脚本它将无法运行:

# $full_path contains the string for the path, e.g. C:\"Program Files (x86)"\supersoftware\uninst.exe

Write-Host $full_path  # Will print on the screen: C:\"Program Files (x86)"\Lorem\uninst.exe
Invoke-Command -ComputerName localhost -ScriptBlock { cmd /c $full_path '"/S"' }  # /S is used for silent uninstall

如何让PS执行它,好像我在终端上输入C:\"Program Files (x86)"\Lorem\uninst.exe /S然后点击进入?

1 个答案:

答案 0 :(得分:2)

因为在不同的会话中调用脚本块,所以默认情况下该变量不存在。您可以使用class TrueBase { public: int x; }; class A :public std::exception { public: }; template<class T> class Base : virtual public TrueBase { public: T* t; }; class Z { void zfoo() {} }; class G : virtual public Base<Z> { public: void foo1() {} }; class Z2 : public Z { void zfoo2() {} }; class G2 : private G, virtual public Base<Z2> { public: using G::foo1; void newfoo() {} }; 范围修饰符来解决此问题。

using

请注意,对象将被序列化以进行远程处理。这不会影响字符串,但复杂对象通常只包含原始属性值。