【问题标题】:How can a PowerShell script save state then continue after a computer reboot?PowerShell 脚本如何保存状态然后在计算机重新启动后继续?
【发布时间】:2020-12-12 08:26:14
【问题描述】:

我从谈论我当前的 Powershell 脚本开始 - 但这将是一个更多的 C# 问题...

我有 3 个 Powershell 脚本,它们都按预期工作。第一个包括一个允许用户选择各种功能的 GUI。一旦选择了功能,它就会依次运行每个功能。 但是,有几个需要重新启动本地计算机。比如重命名电脑和加入域。

“重新启动”部分并不太麻烦,因为 - 在适当的时候 - 脚本会设置一个 RunOnce 注册表项,该注册表项会在重新启动完成后调用第二个脚本。如有必要(取决于所选的原始选项),它会设置另一个 RunOnce 键以在再次重新启动后调用第三个脚本。

到目前为止,我的问题是如何保存重启后进程的变量/状态。

假设用户选择了 5 个选项...

-重命名机器 -加入域 -禁用休眠 - 配置 WSUS -重置索引

我的第三个脚本包含最后 3 个项目 + 其他项目的函数。我希望第三个脚本“知道”最初选择了哪些选项/功能,并且只运行那些 - 而不是其他未被选择的。

现在我开始用 PS 写这个,因为我的大部分任务都是系统配置,我觉得 PS 是更合适的语言。但是,我找不到按照我想要的方式完成此操作的方法。我在 C# 方面的经验“有限” - 足以完成我想要的所有功能 - 或者至少使用 C# 作为调用 PS 脚本的包装器。但我不确定如何保存可以在任何后续重新启动时调用的所选项目的状态。

感谢任何回复。

谢谢! 迈克

【问题讨论】:

  • 问:我不确定如何保存可以在任何后续重新启动时调用的所选项目的状态。 A: 你的 PS 脚本有写入磁盘文件吗?然后让您的重启后脚本读取(并可选择删除)它?
  • 我已将您问题的标题更改为 PowerShell 脚本如何保存状态然后在计算机重新启动后继续? 因为这是您问题的本质。脚本的确切作用;选项是什么以及您如何设法重新启动并不那么重要。考虑按照这些思路浓缩您的问题

标签: c# powershell


【解决方案1】:

如果您要做的只是保存一些变量及其值以便以后重新加载它们,您可以通过将它们写入文件,然后在脚本运行时重新加载该文件来完成此操作.它需要知道才能检查该文件。

我对 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'";

注意:此脚本可以很好地保存/加载简单的值类型,如字符串、数字、日期等。但如果您希望存储整个对象,则可能需要研究其他解决方案。或者想出一些方法来存储某些可以让您恢复该对象的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2021-12-16
    • 2021-11-19
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多