如何编写Powershell脚本在Windows上设置开发人员环境?

时间:2018-08-06 21:56:37

标签: node.js powershell chocolatey

堆栈溢出

我正在使用PowerShell脚本为我的团队设置开发人员环境。我想要它,以便用户可以单击快捷方式并为他们下载并安装必要的开发人员工具。这些安装应该是全局的,并且在PATH上。我已经有了调用脚本的快捷方式。脚本本身就是我遇到的问题。

我正在使用Chocolatey尝试在开发人员机器的节点上安装节点。

这是我到目前为止编写的代码

devEnv.ps1

echo "Installing Chocolatey package manager, check version with choco"
$env: ChocolateyInstall="$Home/chocolatey"
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
echo "Chocolatey installed. Installing NodeJS and NPM via Chocolatey."
Start-Process powershell.exe -argument "-NoExit -Command ./nodejs.ps1"
echo "Installation complete."
Write-Host -NoNewLine 'Press any key to continue...';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');

我能够成功安装Chocolatey,但是无法安装node。我创建了另一个脚本,该脚本在devEnv.ps1的第5行上调用

我希望新的PowerShell实例可以访问choco命令。它不是。下面,我包括了第二个脚本。

nodejs.ps1

Invoke-Expression -Command "choco install nodejs.install"

返回错误

choco : The term 'choco' is not recognized as the name of a cmdlet, 
function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path 
is correct and try again.
At line:1 char:1
+ choco install nodejs.install
+ ~~~~~
+ CategoryInfo          : ObjectNotFound: (choco:String) [], 
CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

2 个答案:

答案 0 :(得分:0)

所以我浏览了您的脚本并遇到了一些需要改进的地方:

    checkpoint = ModelCheckpoint(checkpointFilePath, monitor='val_loss', verbose=1, save_best_only=True, mode='min')
    early_stop = EarlyStopping('val_loss', patience=100)
    callbacks_list = [checkpoint, early_stop]

    for i,_ in enumerate(x_train):
        newx = np.expand_dims(x_train[i],0)
        newy = np.asarray([y_train[i]])

        model.fit(
            newx,
            newy,
            batch_size=50,
            epochs=500,
            verbose=1,
            callbacks=callbacks_list,
            validation_data=(x_test,y_test),
            shuffle=True)

这将通过对可执行调用进行全路径处理来解决在$Env:ChocolateyInstall = "$HOME\chocolatey" $chocoInstall = New-TemporaryFile 'Installing chocolatey package manager.' 'Check version with `choco.exe --version`.' [Net.WebClient]::new().DownloadString( 'https://chocolatey.org/install.ps1' ) | Out-File -FilePath $chocoInstall.FullName -Encoding UTF8 . $chocoInstall.FullName 'Chocolatey installed. Installing NodeJS and NPM via Chocolatey.' & "$Env:ProgramData\chocolatey\choco.exe" install nodejs --yes --force 'Installation complete.' 'Press any key to continue...' $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') 环境变量中找不到choco.exe的问题。此外,它将解决可能已经安装PATH并自动确认软件包的情况。

答案 1 :(得分:0)

您可能需要针对此用例研究Boxstarter。 Boxstarter将处理某些工具所需的重新启动,并具有用于配置工作环境的其他选项(例如,配置Explorer选项)。它还可以处理这种特殊情况,即在安装choco.exe之后才发现它(因为PATH已更新,但Windows尚未使用更改更新当前会话)。

您会在https://boxstarter.org

找到它