我有一个DSC配置,它安装nodejs,将npm添加到环境Path变量,然后安装npm模块。
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脚本文件中使用的节点也是如此。
你知道为什么脚本资源不能读取新添加的路径条目吗?
发布于 2016-08-10 04:11:54
Environment DSC资源实现通过更新存储在注册表中的值进行更改(变量目标进程除外)。对存储在注册表中的环境变量所做的更改不会反映在当前会话中(在会话启动时读取一次)。
使用([System.Environment]::SetEnvironmentVariable)
$env:<VariableName>
([System.Environment]::SetEnvironmentVariable)
$env:<VariableName>的
后者可以被认为是一种不稳定的变化。
这是资源的一个奇怪的限制,我以前看过这个,觉得有点欠缺。
发布于 2016-08-10 03:15:50
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'
}发布于 2016-08-11 03:51:48
您能分享一下您正在使用的DSC版本吗?您可以通过在PowerShell控制台上执行$PSVersionTable来实现此功能。我可以添加到PATH变量,并在脚本资源中使用它。
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也执行得很好。
https://stackoverflow.com/questions/38858136
复制相似问题