我首先讨论我当前的 Powershell 脚本 - 但这将更多地是一个 C# 问题...
我有 3 个 Powershell 脚本,它们都按预期工作。第一个包括一个 GUI,允许用户选择各种功能。一旦选择了功能,它就会按顺序运行每一个功能。 然而,有一些需要重新启动本地计算机。例如重命名 PC 和加入域。
“重新启动”部分并不太麻烦,因为在适当的情况下,脚本会设置一个 RunOnce 注册表项,该注册表项会在重新启动完成后调用第二个脚本。如果有必要(取决于所选的原始选项),它会设置另一个 RunOnce 键以在再次重新启动后调用第三个脚本。
到目前为止,我的问题是如何保存重启后进程的变量/状态。
假设用户选择了 5 个选项...
-重命名机器 -加入域名 - 禁用休眠 -配置WSUS -重置索引
我的第三个脚本包含最后 3 个项目以及其他项目的函数。我希望第三个脚本“知道”最初选择了哪些选项/功能,并且只运行这些选项/功能 - 而不是其他尚未选择的选项/功能。
现在我开始用 PS 编写这篇文章,因为我的大部分任务都是系统配置,我觉得 PS 是更合适的语言。但是,我找不到一种方法来按照我想要的方式完成此操作。我在 C# 方面的经验“有限” - 足以完成我想要的所有功能 - 或者至少使用 C# 作为调用 PS 脚本的包装器。但我不确定如何保存所选项目的状态,以便在后续重新启动时调用这些项目。
感谢任何回复。
谢谢! 迈克
最佳答案
如果您想要做的只是保存一些变量及其值,以便稍后可以重新加载它们,那么您可以通过将它们写入文件,然后在脚本运行时重新加载该文件来实现此目的。它需要知道检查该文件。
我对 RunOnce 键一无所知,但也许您可以向脚本调用添加一个参数,以便向其提供恢复文件。
类似这样的事情:
该脚本接受 3 个参数,然后将它们写入 JSON 格式的文件。
param (
[Parameter()][string]$foo,
[Parameter()][string]$bar,
[Parameter()][int]$baz
)
Write-Host "Do some stuff"
Write-Host "Save state before rebooting"
$state = @{
'foo' = $foo;
'bar' = $bar;
'baz' = $baz;
};
$state | ConvertTo-Json | Set-Content -Path resume.json
此脚本采用 1 个参数,一个指向您刚刚使用上一个脚本创建的 json 文件的文件路径,它填充变量然后将它们吐出:
param (
[Parameter()][string]$StateFile
)
if ($StateFile) {
$state = Get-Content -Path $StateFile | ConvertFrom-Json
$foo = $state.foo;
$bar = $state.bar;
$baz = $state.baz;
}
Write-Host "foo: '$foo' | bar: '$bar' | baz: '$baz'";
注意:此脚本非常适合保存/加载简单的值类型,如字符串、数字、日期等。但如果您希望存储整个对象,那么您可能需要研究其他解决方案。或者想出一些方法来存储某些信息,以便您恢复该对象。
关于c# - PowerShell 脚本如何保存状态并在计算机重新启动后继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65259909/