无法识别函数 Get-IniContent - PowerShell 中的 INI 文件支持
Function Get-IniContent is not recognized - INI file support inPowerShell
我想编辑INI文件的值。我使用这个脚本,但它给我错误。
Get-IniContent : The term 'Get-IniContent' is not recognized as the name of a
cmdlet, function, script file, or operable program.
我在 c:\Users\file.ini
处的 INI 文件的内容:
[XXX]
AB=23
BC=34
读取更新脚本内容:
# Read the content of an *.ini file into a (nested) hashtable.
$ini = Get-IniContent "C:\Users\file.ini"
# Update the 'AB' entry in section [XXX] in-memory.
$ini["XXX"]["AB"] = "12"
# Write the updated content back to the *.ini file.
$ini | Out-IniFile -FilePath "C:\Users\file.ini -Force"
JeroenMostert在评论中提供了关键指针:
从 v7 开始,PowerShell 具有 没有 用于处理 INI 文件的内置 cmdlet (*.ini
),但是引入这样的 cmdlet is being discussed on GitHub.
Get-IniContent
和 Out-IniFile
是 third-party PSIni
module, available from the PowerShell Gallery.
附带的高级函数(类似于 cmdlet 的函数)
在 PowerShell v5 或更高版本中,PowerShellGet
模块[1],安装 就像:
Install-Module -Scope CurrentUser PsIni
如果您省略 -Scope CurrentUser
,您将为 所有 用户安装该模块,但这样做需要 运行 管理权限.
默认情况下(未设置)$PSModuleAutoLoadingPreference
,此模块随后会根据需要自动加载到尝试调用模块命令之一的会话中,比如Get-IniContent
.
这是一个完整的、自包含的示例,它练习了 PsIni
模块的核心功能:
- 按需安装模块
- 使用
Out-IniFile
从嵌套的有序哈希表中从头开始创建示例 *.ini
文件。
- 使用
Get-IniContent
从磁盘读取文件到(新的)嵌套有序哈希表中
- 修改和删除条目
- 用
Out-IniFile
将修改后的哈希表写回文件
注意:假设 Install-Module
可用,即安装了 PowerShellGet
模块,并且 运行 机器在线并允许从 https://www.powershellgallery.com/。
# Import the PsIni module.
# If necessary, install it first, for the current user.
$ErrorActionPreference = 'Stop' # Abort, if something unexpectedly goes wrong.
try {
Import-Module PsIni
} catch {
Install-Module -Scope CurrentUser PsIni
Import-Module PsIni
}
# Create an ordered hashtable that is the in-memory representation of the
# sample *.ini file from the question, with a second section added.
$iniFileContent = [ordered] @{
# 'XXX' is the section name.
# The nested hashtable contains that section's entries.
XXX = [ordered] @{
# IMPORTANT:
# * The PsIni module only supports STRING values.
# * While you can assign values of different types in-memory, they are
# CONVERTED TO STRINGS with .ToString() and READ AS STRINGS later
# by Get-IniContent.
# * In v3+, PSIni now supports values in *.ini files that have
# embedded quoting - e.g., `AB = "23"` as a raw line - which is
# (sensibly) *stripped* on reading the values.
AB = '23'
BC = '34'
}
# Create a 2nd section, named 'YYY', with entries 'yin' and 'yang'
YYY = [ordered] @{
yin = 'foo'
yang = 'none'
}
}
# Use Out-IniFile to create file 'file.ini' in the current dir.
# * Default encoding is UTF-8 (with BOM in Windows PowerShell, without BOM
# in PowerShell Core)
# * Use -Encoding to override, but note that
# Get-IniContent has no matching -Encoding parameter, so the encoding you use
# must be detectable by PowerShell in the absence of explicit information.
# * CAVEAT: -Force is only needed if an existing file must be overwritten.
# I'm using it here so you can run the sample code repeatedly without
# failure, but in general you should only use it if you want to
# blindly replace an existing file - such as after having modified
# the in-memory representation of an *.ini file and wanting to
# write the modifications back to disk - see below.
$iniFileContent | Out-IniFile -Force file.ini
# Read the file back into a (new) ordered hashtable
$iniFileContent = Get-IniContent file.ini
# Modify the value of the [XXX] section's 'AB' entry.
$iniFileContent.XXX.AB = '12'
# Use the alternative *indexing syntax* (which is equivalent in most cases)
# to also modify the [YYY] section's 'yin' entry.
$iniFileContent['YYY']['yin'] = 'bar'
# Remove the 'yang' value from section [YYY]:
$iniFileContent.YYY.Remove('yang')
# Save the modified content back to the original file.
# Note that -Force is now *required* to signal the explicit intent to
# replace the existing file.
$iniFileContent | Out-IniFile -Force file.ini
# Double-check that modifying the values succeeded.
(Get-IniContent file.ini).XXX.AB # should output '12'
(Get-IniContent file.ini).YYY.yin # should output 'bar'
# Print the updated content of the INI file, which
# shows the updated values and the removal of 'yang' from [YYY].
"--- Contents of file.ini:"
Get-Content file.ini
运行 以上应该会成功并输出以下内容,证明 *.ini
文件已成功创建、读回内存、修改并保存回磁盘:
12
bar
--- Contents of file.ini:
[XXX]
AB=12
BC=34
[YYY]
yin=bar
[1] 您可以根据需要为 PowerShell 版本 3 和 4 安装 PowerShellGet
- 请参阅 https://www.microsoft.com/en-us/download/details.aspx?id=51451
因为我是 powershell 的新手,当我读到这篇文章时 post 我首先想到我必须使用 cmdlet 来读写 Ini-Files。
但是,没有必要。
$ini= [System.IO.File]::ReadAllText("c:\temp\test.ini")
[System.IO.File]::WriteAllText("c:\temp\test2.ini", $ini)
这也行...只是想分享 :)
我想编辑INI文件的值。我使用这个脚本,但它给我错误。
Get-IniContent : The term 'Get-IniContent' is not recognized as the name of a
cmdlet, function, script file, or operable program.
我在 c:\Users\file.ini
处的 INI 文件的内容:
[XXX]
AB=23
BC=34
读取更新脚本内容:
# Read the content of an *.ini file into a (nested) hashtable.
$ini = Get-IniContent "C:\Users\file.ini"
# Update the 'AB' entry in section [XXX] in-memory.
$ini["XXX"]["AB"] = "12"
# Write the updated content back to the *.ini file.
$ini | Out-IniFile -FilePath "C:\Users\file.ini -Force"
JeroenMostert在评论中提供了关键指针:
从 v7 开始,PowerShell 具有 没有 用于处理 INI 文件的内置 cmdlet (*.ini
),但是引入这样的 cmdlet is being discussed on GitHub.
Get-IniContent
和 Out-IniFile
是 third-party PSIni
module, available from the PowerShell Gallery.
在 PowerShell v5 或更高版本中,PowerShellGet
模块[1],安装 就像:
Install-Module -Scope CurrentUser PsIni
如果您省略 -Scope CurrentUser
,您将为 所有 用户安装该模块,但这样做需要 运行 管理权限.
默认情况下(未设置)$PSModuleAutoLoadingPreference
,此模块随后会根据需要自动加载到尝试调用模块命令之一的会话中,比如Get-IniContent
.
这是一个完整的、自包含的示例,它练习了 PsIni
模块的核心功能:
- 按需安装模块
- 使用
Out-IniFile
从嵌套的有序哈希表中从头开始创建示例*.ini
文件。 - 使用
Get-IniContent
从磁盘读取文件到(新的)嵌套有序哈希表中 - 修改和删除条目
- 用
Out-IniFile
将修改后的哈希表写回文件
注意:假设 Install-Module
可用,即安装了 PowerShellGet
模块,并且 运行 机器在线并允许从 https://www.powershellgallery.com/。
# Import the PsIni module.
# If necessary, install it first, for the current user.
$ErrorActionPreference = 'Stop' # Abort, if something unexpectedly goes wrong.
try {
Import-Module PsIni
} catch {
Install-Module -Scope CurrentUser PsIni
Import-Module PsIni
}
# Create an ordered hashtable that is the in-memory representation of the
# sample *.ini file from the question, with a second section added.
$iniFileContent = [ordered] @{
# 'XXX' is the section name.
# The nested hashtable contains that section's entries.
XXX = [ordered] @{
# IMPORTANT:
# * The PsIni module only supports STRING values.
# * While you can assign values of different types in-memory, they are
# CONVERTED TO STRINGS with .ToString() and READ AS STRINGS later
# by Get-IniContent.
# * In v3+, PSIni now supports values in *.ini files that have
# embedded quoting - e.g., `AB = "23"` as a raw line - which is
# (sensibly) *stripped* on reading the values.
AB = '23'
BC = '34'
}
# Create a 2nd section, named 'YYY', with entries 'yin' and 'yang'
YYY = [ordered] @{
yin = 'foo'
yang = 'none'
}
}
# Use Out-IniFile to create file 'file.ini' in the current dir.
# * Default encoding is UTF-8 (with BOM in Windows PowerShell, without BOM
# in PowerShell Core)
# * Use -Encoding to override, but note that
# Get-IniContent has no matching -Encoding parameter, so the encoding you use
# must be detectable by PowerShell in the absence of explicit information.
# * CAVEAT: -Force is only needed if an existing file must be overwritten.
# I'm using it here so you can run the sample code repeatedly without
# failure, but in general you should only use it if you want to
# blindly replace an existing file - such as after having modified
# the in-memory representation of an *.ini file and wanting to
# write the modifications back to disk - see below.
$iniFileContent | Out-IniFile -Force file.ini
# Read the file back into a (new) ordered hashtable
$iniFileContent = Get-IniContent file.ini
# Modify the value of the [XXX] section's 'AB' entry.
$iniFileContent.XXX.AB = '12'
# Use the alternative *indexing syntax* (which is equivalent in most cases)
# to also modify the [YYY] section's 'yin' entry.
$iniFileContent['YYY']['yin'] = 'bar'
# Remove the 'yang' value from section [YYY]:
$iniFileContent.YYY.Remove('yang')
# Save the modified content back to the original file.
# Note that -Force is now *required* to signal the explicit intent to
# replace the existing file.
$iniFileContent | Out-IniFile -Force file.ini
# Double-check that modifying the values succeeded.
(Get-IniContent file.ini).XXX.AB # should output '12'
(Get-IniContent file.ini).YYY.yin # should output 'bar'
# Print the updated content of the INI file, which
# shows the updated values and the removal of 'yang' from [YYY].
"--- Contents of file.ini:"
Get-Content file.ini
运行 以上应该会成功并输出以下内容,证明 *.ini
文件已成功创建、读回内存、修改并保存回磁盘:
12
bar
--- Contents of file.ini:
[XXX]
AB=12
BC=34
[YYY]
yin=bar
[1] 您可以根据需要为 PowerShell 版本 3 和 4 安装 PowerShellGet
- 请参阅 https://www.microsoft.com/en-us/download/details.aspx?id=51451
因为我是 powershell 的新手,当我读到这篇文章时 post 我首先想到我必须使用 cmdlet 来读写 Ini-Files。 但是,没有必要。
$ini= [System.IO.File]::ReadAllText("c:\temp\test.ini")
[System.IO.File]::WriteAllText("c:\temp\test2.ini", $ini)
这也行...只是想分享 :)