需要在独立于脚本的实例中运行Powershell命令

需要在独立于脚本的实例中运行Powershell命令,powershell,Powershell,我正在编写PowerShell脚本来安装Oracle客户端19c。在安装开始之前,我需要在脚本中做的一件事是从Windows注册表中删除一个环境变量。这是我在脚本中用于执行此操作的命令: Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "ORACLE_BASE" -Force 问题是,当脚本中稍后开始安

我正在编写PowerShell脚本来安装Oracle客户端19c。在安装开始之前,我需要在脚本中做的一件事是从Windows注册表中删除一个环境变量。这是我在脚本中用于执行此操作的命令:

Remove-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "ORACLE_BASE" -Force
问题是,当脚本中稍后开始安装时,它仍然认为设置在那里,即使在脚本完成运行后,当我查看时,设置不再在那里。所以我想我需要在一个特殊的实例中运行这个命令,这样它就会立即生效。只是不确定最好的方法。我尝试过在脚本中同时使用start process和invoke expression来启动powershell,但这两种方法似乎都不起作用。任何帮助都将不胜感激

问题是,当脚本中稍后开始安装时,它仍然认为设置在那里,即使在脚本完成运行后,当我查看时,设置不再在那里。所以我想我需要在一个特殊的实例中运行这个命令,这样它就会立即生效

你的假设不正确

可执行文件的环境变量继承自启动可执行文件的进程。从注册表中删除环境变量不会使其从当前进程中消失。这就是为什么“它仍然认为设置在那里。”

如果启动安装时确实需要环境中不存在该变量,请从shell中取消设置该变量并运行安装程序:

  • cmd.exe
    shell脚本/批处理:

     set ORACLE_BASE=
    
  • PowerShell:

    Remove-Item Env:ORACLE_BASE -ErrorAction SilentlyContinue
    
    -ErrorAction SilentlyContinue
    可以缩短为
    -EA 0
    (如果变量不在环境中,它可以防止出现错误消息)

删除变量后(使用上面与shell匹配的命令),然后从该shell启动安装程序。然后安装程序从shell继承环境,因此在安装程序的过程中不会定义变量

问题是,当脚本中稍后开始安装时,它仍然认为设置在那里,即使在脚本完成运行后,当我查看时,设置不再在那里。所以我想我需要在一个特殊的实例中运行这个命令,这样它就会立即生效

你的假设不正确

可执行文件的环境变量继承自启动可执行文件的进程。从注册表中删除环境变量不会使其从当前进程中消失。这就是为什么“它仍然认为设置在那里。”

如果启动安装时确实需要环境中不存在该变量,请从shell中取消设置该变量并运行安装程序:

  • cmd.exe
    shell脚本/批处理:

     set ORACLE_BASE=
    
  • PowerShell:

    Remove-Item Env:ORACLE_BASE -ErrorAction SilentlyContinue
    
    -ErrorAction SilentlyContinue
    可以缩短为
    -EA 0
    (如果变量不在环境中,它可以防止出现错误消息)


删除变量后(使用上面与shell匹配的命令),然后从该shell启动安装程序。然后安装程序从shell继承环境,因此,变量不会在安装程序的过程中定义。

为什么在启动安装时定义了
ORACLE\u BASE
环境变量很重要?因为它会通过将ORACLE资源清册安装到该变量路径的位置来改变安装行为,我不希望这样。在这种情况下,只需从启动安装程序的进程中删除环境变量(请参阅我的答案,其中描述了如何从
cmd.exe
或PowerShell shell中执行此操作)。如果在启动安装时定义了
ORACLE_BASE
环境变量,这又有什么关系呢?因为它会通过将ORACLE资源清册安装到该变量路径的位置来更改安装行为,我不希望这样。在这种情况下,只需从启动安装程序的进程中删除环境变量即可(请参阅我的答案,其中描述了如何从
cmd.exe
或PowerShell shell执行此操作)。