TUI 里唯一缺的控件:读一行文本(字符追加 / Backspace 删除 / Enter 确认 / Esc 取消)。 为什么不用 Read-Host:TUI 的所有输入都走同一个 -Driver,门禁才能用 -InputScript 把"输入一个值"这一步也驱动起来 —— Read-Host 无法脚本驱动,会在门禁里挂住,而挂起比变红糟得多。 为什么 Esc 返回 $null 而不是空串:空串是"把值改成空"这个**合法意图**,取消是另一个意思,两者必须能区分,否则调用方会把"用户取消"当成"用户要清空它"。 方向键等非字符键一律忽略(在输入行里按方向键不该有副作用);字母按小写存(与键名归一化一致)。判据 8 条,全部按键序列驱动。 验收:test.ps1 9/9 全绿(5.1 与 7)。
117 lines
4.3 KiB
PowerShell
117 lines
4.3 KiB
PowerShell
<#
|
|
模块清单。
|
|
|
|
为什么需要它:把"这个模块对外提供什么"变成一份可读的契约。这里 FunctionsToExport 是
|
|
**显式白名单**(官方性能指南明确要求不用通配符;PSUseToExportFieldsInManifest 也是恒开
|
|
的规则、关不掉)。名字少写一个,对应函数就不会被导出 —— 这是有意的:宁可导入方报
|
|
"找不到命令",也不要静默少一个函数。
|
|
|
|
CompatiblePSEditions 声明"桌面版与核心版都能导入":本模块兼容 Windows PowerShell 5.1
|
|
与 PowerShell 7.x。代价是放弃 PS 4.0 及以下,那是刻意的。
|
|
#>
|
|
@{
|
|
RootModule = 'BakNRet.psm1'
|
|
ModuleVersion = '1.0.0'
|
|
GUID = '9bc892ed-f852-4468-b1e7-d71a91cf2913'
|
|
Author = 'Shuery'
|
|
Description = 'BakNRet 公共模块:日志、外部命令调用、清单与名录解析、归档命名与暂存、manifest、安全描述符。兼容 Windows PowerShell 5.1 与 PowerShell 7.x。'
|
|
PowerShellVersion = '5.1'
|
|
CompatiblePSEditions = @('Desktop', 'Core')
|
|
|
|
FunctionsToExport = @(
|
|
'Read-BakNRetLine',
|
|
'Get-BakNRetConfigSetting',
|
|
'Set-BakNRetConfigSetting',
|
|
'Invoke-BakNRetEntryScript',
|
|
'Invoke-BakNRetBackupListEditor',
|
|
'Set-BakNRetBackupListDirection',
|
|
'Save-BakNRetConfigFile',
|
|
'Get-BakNRetBackupListRow',
|
|
'Set-BakNRetBackupListRow',
|
|
'Invoke-BakNRetMenu',
|
|
'Update-BakNRetMenuState',
|
|
'Format-BakNRetPaddedText',
|
|
'Write-BakNRetAt',
|
|
'Get-BakNRetKeyName',
|
|
'New-BakNRetInputDriver',
|
|
'Read-BakNRetKey',
|
|
'Get-BakNRetCellWidth',
|
|
'Write-BakNRetRunSummary',
|
|
'Save-BakNRetItemRecord',
|
|
'New-BakNRetItemRecord',
|
|
'Find-BakNRet7zExecutable',
|
|
'Resolve-BakNRetRootedPath',
|
|
'Test-BakNRetItemSelected',
|
|
'Enter-BakNRetRunLock',
|
|
'Exit-BakNRetRunLock',
|
|
'Get-BakNRetRunLockPath',
|
|
'Set-BakNRetDebug',
|
|
'Start-BakNRetLog',
|
|
'Stop-BakNRetLog',
|
|
'Get-BakNRetLogPath',
|
|
'Write-BakNRetLog',
|
|
'Test-BakNRetAdministrator',
|
|
'Get-BakNRetFreeSpaceGB',
|
|
'ConvertTo-BakNRetNativeArgumentString',
|
|
'Invoke-ExternalCommand',
|
|
'Resolve-BakNRetCompressionTool',
|
|
'Get-Optimized7zArgument',
|
|
'Split-BakNRetToken',
|
|
'Remove-BakNRetQuote',
|
|
'Test-BakNRetMarker',
|
|
'ConvertFrom-BakNRetPatternList',
|
|
'ConvertFrom-BackupListLine',
|
|
'Test-BakNRetLiteralPath',
|
|
'Get-BakNRetRegexExclude',
|
|
'Get-BakNRetExcludeArgument',
|
|
'Split-BakNRetPatternScope',
|
|
'Merge-BakNRetExcludeArgument',
|
|
'Resolve-BakNRetCatalogPath',
|
|
'Get-BakNRetSoftwareCatalog',
|
|
'Find-BakNRetChildDirectoryByName',
|
|
'Format-BakNRetCatalogName',
|
|
'Expand-CatalogPathText',
|
|
'Get-BakNRetArchiveTopLevelNames',
|
|
'Get-BakNRetArchiveTopName',
|
|
'New-BakNRetArchiveItem',
|
|
'New-BakNRetJunction',
|
|
'Remove-BakNRetJunction',
|
|
'New-BakNRetArchiveStaging',
|
|
'Remove-BakNRetArchiveStaging',
|
|
'Get-BakNRetItemArchiveName',
|
|
'Resolve-BakNRetBackupEntry',
|
|
'Write-BakNRetBackupEntryPlan',
|
|
'Get-BakNRetBackupBaseName',
|
|
'Convert-BakNRetBackupFileNameToPath',
|
|
'Get-BakNRetFolderSummary',
|
|
'Read-BakNRetManifest',
|
|
'Write-BakNRetManifest',
|
|
'Sync-BakNRetManifestArchive',
|
|
'Move-BakNRetArchiveIntoPlace',
|
|
'Enable-BakNRetPrivilege',
|
|
'ConvertTo-BakNRetWildcardPattern',
|
|
'Test-BakNRetPathExcluded',
|
|
'Get-BakNRetAceSignatureList',
|
|
'Get-BakNRetSecuritySddlWithStale',
|
|
'Get-BakNRetSecurityRecord',
|
|
'Test-BakNRetSecurityRecordNeeded',
|
|
'Get-BakNRetSecurityRecords',
|
|
'Write-BakNRetAtomicText',
|
|
'Save-BakNRetSecuritySidecar',
|
|
'Read-BakNRetSecuritySidecar',
|
|
'Convert-BakNRetSidMap',
|
|
'Set-BakNRetObjectSecurity',
|
|
'Restore-BakNRetSecurity',
|
|
'Get-BakNRetConfig',
|
|
'Get-BakNRetPassword'
|
|
)
|
|
CmdletsToExport = @()
|
|
VariablesToExport = @()
|
|
AliasesToExport = @()
|
|
|
|
PrivateData = @{
|
|
PSData = @{ Tags = @('Backup', 'Restore', '7zip', 'Windows', 'PSEdition_Desktop', 'PSEdition_Core') }
|
|
}
|
|
}
|
|
|