PowerShell脚本用于备份所有环境变量并将其保存在文件中

ugmeyewa  于 2023-11-18  发布在  Shell
关注(0)|答案(2)|浏览(112)

我是PowerShell的新手,最近开始学习它的一些命令。
现在,我正在尝试从环境Path变量(System)中添加、编辑和删除任何路径条目。
但我担心的情况下,如果出了什么问题,所以我想采取备份的所有环境变量的情况下,我需要恢复。
我有下面的小工具来在屏幕上显示特定的变量,但是任何人都可以让我知道如何通过.ps1 PowerShell脚本将所有环境变量(系统和用户)备份到文本文件中吗?

Get-ChildItem Env:Path

字符串

unftdfkk

unftdfkk1#

注意事项:PowerShell的env:驱动器仅反映 * 当前进程 * 的环境变量-要 * 持久地 * 更改系统或当前用户的环境变量,您必须直接使用.NET Framework-请参阅this answer
因此,下面的代码片段使用了env:,只展示了如何
保存和恢复当前 * 进程**的所有环境变量:

# Save all the process' environment variables in CLIXML format.
Get-ChildItem env: | Export-CliXml ./env-vars.clixml

# ... modify the env. variables

# Restore the previously saved env. variables.
Import-CliXml ./env-vars.clixml | % { Set-Item "env:$($_.Name)" $_.Value }

字符串
请注意,这不会 * 删除 * 任何 * 新的 * env.变量,您可能已经创建了在此期间-需要额外的工作来消除这些:请参阅this answer
注意事项:Export-CliXmlImport-CliXml被使用,因为它们支持值的健壮往返(序列化/重命名)(尽管你不能 * 通常 * 重新创建非常相同 * 类型 * 的对象,只能重命名 * 类似的对象 )。
相比之下,使用类似Get-ChildItem env: > ./env-vars.txt或其等效物,Get-ChildItem env: | Out-File ./env-vars.txt只是将Get-ChildItem输出保存为 * 纯文本
*,就像它在控制台中显示的那样 *,这不是一种适合 * 机器解析 *(解析)的格式。

可选阅读:为什么Import-CliXml ./env-vars.clixml | Set-Item * 应该 * 工作,但不工作:

Set-Item旨在通过管道绑定参数值,特别是-LiteralPath(别名-PSPath)和-Value
因此,如果Set-Item通过管道接收具有这些名称的 * 属性 * 的对象,(.PSPath.Value),它们 * 应该 * 自动绑定到-PSPath-LiteralPath)和-Value参数,启用调用,如... | Set-Item-因此 * 应该 * 不需要通过%进行显式枚举和显式参数传递(ForEach-Object),如上所述。
然而,不幸的是,从Windows PowerShell v5.1 / PowerShell Core v6.0.1开始,-Value参数的定义方式 * 还 * 将输入对象 * 作为一个整体 * 绑定到-ValueValueFromPipeline),如果-Value一般定义为[System.Object]类型,则 * 始终 * 优先于查找对象的.Value * 属性 *(ValueFromPipelineByPropertyName)-换句话说:**没有输入对象,无论其类型如何,都不会被其.Value属性绑定-任何输入对象都被 * 绑定为自身 *。
在本例中,Import-CliXml输出的对象的类型为[Deserialized.System.Collections.DictionaryEntry];它们被绑定到-Value,然后在设置环境变量时转换为 string(环境变量只能包含 string 值);该类型的字符串表示是System.Collections.DictionaryEntry-与其.Value属性无关-并且该通用字符串因此被无用地设置为环境变量的值。
此问题行为已在GitHub issue #5543中报告。

7gcisfzg

7gcisfzg2#

您始终可以通过“管道”(使用|)将命令输出到具有Out-File cmdlet

Get-ChildItem env: | Out-File test.txt

字符串
“test.txt”是您的文件名。

相关问题