当前位置: 首页 > news >正文

密山网站建设长沙装修

密山网站建设,长沙装修,杭州手机网站开发,免费下载app软件正版文章目录 命令行中获取环境变量取值获取不展开的值具体实现注解 封装为函数版本1版本2 命令行中获取环境变量取值 这里主要讨论获取未展开的值本来获取未展开的值应该作为默认选项,至少有合适的api方便直接调用,但是不知道微软怎么想的,让这个任务变得不直接 获取不展开的值 … 文章目录 命令行中获取环境变量取值获取不展开的值具体实现注解 封装为函数版本1版本2 命令行中获取环境变量取值 这里主要讨论获取未展开的值本来获取未展开的值应该作为默认选项,至少有合适的api方便直接调用,但是不知道微软怎么想的,让这个任务变得不直接 获取不展开的值 为了便于讨论和实验,下面假设环境变量都讨论的是当前用户级别的环境变量 意思是假设你的环境变量中有一个 exes变量,并假设对应的取值为 C:\exes 现在某个变量比如 Path,或者其他任何引用了 exes的环境变量(例如 创建环境变量 testx,可以通过语句 setx testx %exes%) 在使用命令行查询 testx时查询到的值不是 %exes%,而是其展开值 C:\exes,这会造成许多间接引用的路径发生更改后无法自动更新,造成灵活性下降,特别是通过命令行修改(尤其是添加)多取值环境变量的部分值的时候 比如 %exes%被改为 C:/new/exes,但是由于添加新值前需要获取旧值,旧值中的 %exes%如果被替换为 C:\exes,那么在为 testx添加新值时丢失 %exes%,取而代之的是 C:\exes ,然而这个值不是我们想要的,因为它是死板的,不会随着 %exes%的更新而自动更新 此外,这里的不展开环境变量主要值的是记录着路径的环境变量) 总之,我们需要解决的问题是命令行获取不展开的值 目前的方法是通过访问注册表来获取不展开的值 相关注册表 HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment #系统级 HKCU:\Environment #当前用户级相关命令 reg queryGet-item 具体实现 推荐powershell的Get-item,即(gi)命令来获取 #以HKCU:\Environment为例 # 准备用语测试的一对值 setx exes C:\exes1 setx testx %exes1%#为了获取非展开的原值,可以直接用Get-Item访问HKCU:\Environment,也可以分为两部分访问路径 #考虑到全局/用户级别环境变量路径都是以environment结尾,这样可以更灵活和选择判断全局还是用户级别 $Nametestx #$registerKeyParentGet-Item -Path HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager $registerKeyParentGet-Item -Path HKCU:#获取目标路径的父路径 $RegisterKey $registerKeyParent.OpenSubKey(Environment) #打开指定子键$registryValueOption [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames$RegisterKey.GetValue($Name, $null, $registryValueOption)相关api如下 RegistryKey.GetValue 方法 (Microsoft.Win32) | Microsoft Learn PS $envRegisterKey.GetValueOverloadDefinitions ------------------- System.Object GetValue(string name) System.Object GetValue(string name, System.Object defaultValue) System.Object GetValue(string name, System.Object defaultValue, Microsoft.Win32.RegistryValueOptions options)注解 使用此重载指定检索到的值的特殊处理。 例如可以在检索类型的RegistryValueKind.ExpandString注册表值时指定RegistryValueOptions.DoNotExpandEnvironmentNames检索字符串而无需展开嵌入的环境变量。 defaultValue使用 参数指定要返回的值如果name不存在。 封装为函数 下面两个版本实现方式不同,注意参数不同,根据需要调整 版本1 来源于scoop中的函数Get-EnvVar function Get-EnvVarRawValue {#.SYNOPSISRetrieve an environment variable value..DESCRIPTIONThis function retrieves the value of the specified environment variable from the registry. It can fetch both user-specific and system-wide variables..PARAMETER NameThe name of the environment variable..PARAMETER GlobalSwitch to indicate if the environment variable is global (system-wide)..EXAMPLEGet-EnvVar -Name Path#param([string]$Name,[switch]$Global)# Determine the appropriate registry key to use based on the Global flag# User scope uses the HKCU hive, while global (system-wide) uses the HKLM hive$registerKey if ($Global){# HKLM hive is used for system-wide environment variables# This is the same key used by the system Configuration Manager# when setting environment variables through the System Properties# control panelGet-Item -Path HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager}else{# HKCU hive is used for user-specific environment variablesGet-Item -Path HKCU:}# Open the Environment sub-key off the selected registry key$envRegisterKey $registerKey.OpenSubKey(Environment)# Retrieve the value of the specified environment variable# The DoNotExpandEnvironmentNames option is used to prevent the registry# from expanding any environment variables it finds in the value# This is necessary because environment variables can be nested (e.g. %PATH%)# and we want to return the raw, unexpanded value$registryValueOption [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames$envRegisterKey.GetValue($Name, $null, $registryValueOption) }版本2 function Get-EnvVarRawValue {# .SYNOPSIS从相应的注册表中读取指定环境变量的取值.DESCRIPTION# 不会自动转换或丢失%var%形式的Path变量提取# 采用reg query命令查询而不使用Get-ItemProperty 查询注册表, 因为Get-ItemProperty 会自动转换或丢失%var%形式的变量# 注册表这里也可以区分清楚用户级别和系统级别的环境变量#[CmdletBinding()]param ([Alias(Name, Key)]$EnvVar new, [ValidateSet(Machine, User, Process)]$Scope User)$currentValue [System.Environment]::getenvironmentvariable($EnvVar, $Scope)if ($CurrentValue){if ($scope -eq User -or $scope -eq Process){$CurrentValueUser reg query HKEY_CURRENT_USER\Environment /v $EnvVar$currentValue $CurrentValueUser}if ($scope -eq Machine -or $scope -eq Process){$currentValueMachine reg query HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment /v $EnvVar$currentValue $currentValueMachine}if ($Scope -eq process){#recurse$U Get-EnvVarRawValue -EnvVar $EnvVar -Scope User$M Get-EnvVarRawValue -EnvVar $EnvVar -Scope Machine$currentValue (($U , $M) -join ;) -split ; | Select-Object -Unique | Remove-RedundantSemicolonreturn $currentValue# $CurrentValue $CurrentValueUser $currentValueMachine}$CurrentValue ($CurrentValue) -join #确保$CurrentValue是一个字符串# $CurrentValue -match Path\sREG_EXPAND_SZ\s(.)# $mts [regex]::Matches($CurrentValue, $pattern)# return $mtsif ($CurrentValue -match REG.*SZ\s(.)){$CurrentValue $Matches[1] | Remove-RedundantSemicolon# 规范化}}if ($VerbosePreference){Write-Verbose RawValue of [$EnvVar]:Write-Host ($currentValue -split ; | Format-DoubleColumn | Out-String)}# 返回的是一个字符串,而不是;分隔的字符串数组return $currentValue }
http://www.dnsts.com.cn/news/22424.html

相关文章:

  • 企业网站建设的一般要素太原cms模板建站
  • 怎么判断网站建设年龄最好用的网站
  • 华东建设发展设计有限公司网站甘肃省路桥建设集团网站
  • 龙岗公司网站建设平面设计和电商设计的区别
  • 英语网站案例咸阳住房和城乡建设局网站
  • 做网站需要看的书苏州seo
  • 东莞市主营网站建设平台模版建站
  • 网站前置审批文件网站建设成都云
  • 门户网站时代青岛网站seo优化
  • 做网站投注员挣钱吗自己做的旅游网站简介
  • 网站集约化建设推进情况网络空间安全专业大学排名
  • 网站怎么集成支付宝国外的外贸网站
  • 临沂网站公司哪家好wordpress企业h5主题
  • 网站上线发布流程专业网络推广软件
  • 网站上传根目录蜘蛛不抓取网站的原因
  • 外汇做单在什么网站品辰设计的网站谁做的
  • 网站维护一般要几天上国外网站用什么机箱好
  • 合肥专业做网站的公司有哪些wordpress 目录下拉框
  • qq空间实名认证网站wordpress 主题安全建设
  • 网站模板建站教程视频织梦手机网站建设
  • 广州 网站优化企业建站用什么主机
  • t恤图案设计网站网站建设源码开发
  • 宽屏网站和普通网站软件开发文档国标
  • 如何让网站被百度快速收录win8风格网站开发实例
  • 编程 网站建设长沙网站运营
  • 郑州做网站建设html设计网页作业代码
  • 网匠网站建设有限公司中国石化工程建设有限公司王龙哲
  • 个人网站设计论文摘要关键词湖南企业建网站
  • 建设摩托车官方网站机械设备东莞网站建设
  • .net网站开发项目东营住房和城乡建设厅网站