永久的PowerShell变量

8

有没有一种方法可以在PowerShell中定义变量,以便当我打开新的PowerShell窗口时,它仍保持相同的值?

我需要这个变量保持它的值,因为我需要不时重新启动我的服务器,并且我不想失去这些值。


你到底在变量中存储了什么需要永久保存的东西? - JNK
3
我有一个变量,它包含一个目录下的文件清单。例如,我有一个名为$directorysnapshot的变量,它使用dir -r 'path'命令列出该目录下的所有文件,我希望保持这个清单不变。因为一些文件可能在此期间发生了更改,所以我不能让变量在每次启动时都重新定义。 - GwFiles
7个回答

9

存储:

$variable|export-clixml -path $Location

获取数据的方法:

$variable = import-clixml -path $Location

如果您想要一个函数,可以将其放到函数中,例如:
```javascript function doSomething() { // 在这里编写代码 } ```
function LoadTHEvariable($location)
{
    $global:variable = import-clixml -path $Location
}
$location 显然包含了你想要存储变量的文件系统位置。

6
你可以将数据存储在你的PowerShell配置文件中。配置文件的详细信息请参考此链接

这通常是我的做法。我倾向于存储诸如svn url之类的东西,以便我可以轻松地进行合并,例如:svn merge -c 100 $someBranchName - mwilson
我有一个变量,其中包含目录下的文件列表。例如,我有一个名为$directorysnapshot的变量,它包含了该目录下所有文件的列表,并且我想保持它的不变。我不能让这个变量在每次启动时重新定义,因为此时可能已经更改了某些文件。 - GwFiles

4
考虑使用环境变量。

2
注意:除非使用SETX设置,否则环境变量在重新启动后不会持久化。 - Iszi
你可以使用PowerShell通过[Environment] :: SetEnvironmentVariable()设置持久性环境变量。 - Skatterbrainz

2

您是否考虑过其他备选方式来存储变量? PowerShell中的变量通常只持续到PowerShell会话结束。但是,PowerShell可以轻松查询几种旨在更长时间持久化的其他来源。特别是注册表和文件系统。

对于要在重启后持续存在的变量,我建议将其存储在注册表中,然后使用PowerShell查询该值(可能在会话变量中缓存)。


我有一个变量,其中包含目录下的文件列表。例如,我有一个名为$directorysnapshot = dir -r 'path'的变量,其中包含该目录下所有文件的列表,并且我希望保持相同的列表。我不能让该变量在每次启动时重新定义,因为此时可能已更改某些文件。 - GwFiles
1
如果需要持久化,为什么注册表不是一个好的选择呢?可以将结果持久化并在启动时重新加载。 - JaredPar

2

变量是一个容器,你可以创建并告诉PowerShell你想让这个容器成为一个文件。 ${c:\variableToKeep.txt} = '我想保留这个值'

每次想要获取内部的值,只需调用变量 ${c:\variableToKeep.txt}

你可以将这个文件放在共享文件夹中或在机器之间复制它,你可以在任何机器上读取和写入该变量。


1

0

使用Add-Content命令,您可以轻松实现。这里的关键是PowerShell配置文件,可以通过$profile[.host]访问,它是一个预定义变量,指向用户状态信息(永久)存储在ROM文件中的路径。最后的-Force参数非常重要,以便覆盖尚未创建$profile变量的情况。

Add-Content -Path $profile -Value $directorysnapshot -Force

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接