首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DSC脚本资源无法读取环境变量

DSC脚本资源无法读取环境变量
EN

Stack Overflow用户
提问于 2016-08-10 02:39:07
回答 3查看 780关注 0票数 2

我有一个DSC配置,它安装nodejs,将npm添加到环境Path变量,然后安装npm模块。

代码语言:javascript
复制
    xPackage InstallNodeJs {
        Name = 'Node.js'
        Path =  "$env:SystemDrive\temp\node-v4.4.7-x64.msi"
        ProductId = '8434AEA1-1294-47E3-9137-848F546CD824'
        Arguments = "/quiet"
    }

    Environment AddEnvironmentPaths
    {
        Name = "Path"
        Ensure = "Present"
        Path = $true
        Value = "$env:SystemDrive\ProgramData\npm"
    }

    Script UpgradeNpm {
        SetScript = {
            & npm install --global --production npm-windows-upgrade               
            & npm-windows-upgrade --npm-version 3.10.6
        }
        TestScript = {
            $npmVersion = & npm -v
            return $npmVersion -eq "3.10.6"
        }
        GetScript = { 
            return {@{Result = "UpgradeNpm"}}
        }
     }

安装nodejs并将npm添加到路径变量似乎是成功的。nodejs和npm location都被添加到Path中,我可以在powershell和cmd中使用它们。

但是,脚本资源返回未将'npm‘识别为内部或外部命令...npm-windows-upgrade脚本文件中使用的节点也是如此。

你知道为什么脚本资源不能读取新添加的路径条目吗?

EN

回答 3

Stack Overflow用户

发布于 2016-08-10 04:11:54

Environment DSC资源实现通过更新存储在注册表中的值进行更改(变量目标进程除外)。对存储在注册表中的环境变量所做的更改不会反映在当前会话中(在会话启动时读取一次)。

使用([System.Environment]::SetEnvironmentVariable)

  • Modifying $env:<VariableName>

([System.Environment]::SetEnvironmentVariable)

  • Modifying$env:<VariableName>

后者可以被认为是一种不稳定的变化。

这是资源的一个奇怪的限制,我以前看过这个,觉得有点欠缺。

票数 2
EN

Stack Overflow用户

发布于 2016-08-10 03:15:50

代码语言:javascript
复制
xPackage InstallNodeJs {
    Name = 'Node.js'
    Path =  "$env:SystemDrive\temp\node-v4.4.7-x64.msi"
    ProductId = '8434AEA1-1294-47E3-9137-848F546CD824'
    Arguments = "/quiet"
}

Environment AddEnvironmentPaths
{
    Name = "Path"
    Ensure = "Present"
    Path = $true
    Value = "$env:SystemDrive\ProgramData\npm"
    DependsOn = '[xPackage]InstallNodeJs'
}

Script UpgradeNpm {
    SetScript = {
        & npm install --global --production npm-windows-upgrade               
        & npm-windows-upgrade --npm-version 3.10.6
    }
    TestScript = {
        $npmVersion = & npm -v
        return $npmVersion -eq "3.10.6"
    }
    GetScript = { 
        return {@{Result = "UpgradeNpm"}}
    }

    DependsOn = '[Environment]AddEnvironmentPaths'
 }
票数 1
EN

Stack Overflow用户

发布于 2016-08-11 03:51:48

您能分享一下您正在使用的DSC版本吗?您可以通过在PowerShell控制台上执行$PSVersionTable来实现此功能。我可以添加到PATH变量,并在脚本资源中使用它。

代码语言:javascript
复制
configuration NPMTest
{

  Environment AddEnvironmentPaths
  {
    Name = 'Path'
    Ensure = 'Present'
    Path = $true
    Value = "$env:SystemDrive\ProgramData\npm"    
  }

  Script p
  {
    GetScript = {@{}}
    TestScript = {return $false}
    SetScript = {$a = & a.ps1 ; Write-Verbose $a -Verbose}
 }
}

即使我没有指定脚本的完整路径,脚本a.ps1也执行得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38858136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档