我知道Stackoverflow上有关于此主题的其他问题,但没有一个问题解决了我的问题。我有一个给定程序的完整路径,例子可能是:
如果我尝试通过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
然后点击进入?
答案 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
请注意,对象将被序列化以进行远程处理。这不会影响字符串,但复杂对象通常只包含原始属性值。