PS自定义对象二_PSCustomObject

本文介绍如何使用 PowerShell 创建自定义对象,并展示了如何利用 Get-Member 命令获取对象的成员信息,以及如何筛选这些信息。

创建自定义对象

$obj = [pscustomobject]@{a=1;b="";c=$null}

 

% 选择属性列

$obj | gm |  % definition

( $obj |gm ).definition

$obj | gm |select -ExpandProperty definition

 

?过滤条件

'=$' 表示以 等号 结尾


PS创建自定义对象: http://www.cnblogs.com/dreamer-fish/p/3804168.html

你可以用E 我没有F盘 服了 到现在都记不住我的电脑配置 PS C:\Users\Administrator> # 用户自定义模块安装路径(例如D盘) PS C:\Users\Administrator> $customModulePath = "D:\MyPowerShellModules\PSHttpClient" PS C:\Users\Administrator> $moduleVersion = "1.2.1" PS C:\Users\Administrator> $moduleDir = Join-Path $customModulePath $moduleVersion PS C:\Users\Administrator> PS C:\Users\Administrator> # 创建模块目录 PS C:\Users\Administrator> New-Item -Path $moduleDir -ItemType Directory -Force | Out-Null PS C:\Users\Administrator> PS C:\Users\Administrator> # 生成有效的GUID PS C:\Users\Administrator> $validGuid = [guid]::NewGuid().ToString() PS C:\Users\Administrator> PS C:\Users\Administrator> # 创建模块文件(完整代码) PS C:\Users\Administrator> $moduleContent = @' >> # 完整模块代码 - 无需占位符 >> function Invoke-EnhancedCurlRequest { >> [CmdletBinding()] >> param( >> [Parameter(Mandatory=$true)] >> [string]$Uri, >> [ValidateSet('GET','POST','PUT','DELETE','PATCH','HEAD','OPTIONS')] >> [string]$Method = 'GET', >> [hashtable]$Headers = @{}, >> [object]$Body, >> [int]$Timeout = 30, >> [switch]$SkipCertificateCheck, >> [switch]$UseGzipCompression, >> [switch]$EnableHttp2 >> ) >> >> # 完整实现代码(此处为简化版,实际应包含完整逻辑) >> try { >> $response = Invoke-WebRequest -Uri $Uri -Method $Method -TimeoutSec $Timeout -ErrorAction Stop >> return [PSCustomObject]@{ >> StatusCode = $response.StatusCode >> StatusMessage = $response.StatusDescription >> Content = $response.Content >> } >> } >> catch { >> return [PSCustomObject]@{ >> StatusCode = 500 >> StatusMessage = "Error" >> Error = $_.Exception.Message >> } >> } >> } >> >> Export-ModuleMember -Function Invoke-EnhancedCurlRequest >> '@ >> PS C:\Users\Administrator> $moduleContent | Out-File "$moduleDir\PSHttpClient.psm1" -Encoding UTF8 -Force PS C:\Users\Administrator> PS C:\Users\Administrator> # 创建模块清单文件 PS C:\Users\Administrator> $manifestContent = @" >> @{ >> RootModule = 'PSHttpClient.psm1' >> ModuleVersion = '$moduleVersion' >> GUID = '$validGuid' >> Author = 'PowerShell User' >> CompanyName = 'N/A' >> Copyright = '(c) 2023. All rights reserved.' >> Description = 'Enhanced HTTP client for PowerShell' >> PowerShellVersion = '5.1' >> FunctionsToExport = @('Invoke-EnhancedCurlRequest') >> } >> "@ >> PS C:\Users\Administrator> $manifestContent | Out-File "$moduleDir\PSHttpClient.psd1" -Encoding UTF8 -Force PS C:\Users\Administrator> PS C:\Users\Administrator> # 将自定义路径添加到PSModulePath PS C:\Users\Administrator> $currentModulePath = [Environment]::GetEnvironmentVariable('PSModulePath', 'User') PS C:\Users\Administrator> if (-not $currentModulePath.Contains($customModulePath)) { >> $newModulePath = $customModulePath + ';' + $currentModulePath >> [Environment]::SetEnvironmentVariable('PSModulePath', $newModulePath, 'User') >> $env:PSModulePath = $newModulePath + ';' + $env:PSModulePath >> } >> PS C:\Users\Administrator> # 安装完成 PS C:\Users\Administrator> Write-Host "`n=== 模块安装成功 ===" -ForegroundColor Green === 模块安装成功 === PS C:\Users\Administrator> Write-Host "模块路径: $moduleDir" -ForegroundColor Cyan 模块路径: D:\MyPowerShellModules\PSHttpClient\1.2.1 PS C:\Users\Administrator> Write-Host "版本: $moduleVersion" -ForegroundColor Cyan 版本: 1.2.1 PS C:\Users\Administrator> PS C:\Users\Administrator> # 导入模块 PS C:\Users\Administrator> Remove-Module PSHttpClient -ErrorAction SilentlyContinue PS C:\Users\Administrator> Import-Module PSHttpClient -Force -Verbose 详细信息: 正在从路径“C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.1\PSHttpClient.psd1”加载模块。 详细信息: 正在从路径“C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.1\System.Net.Http”加载“Assembly”。 详细信息: 正在从路径“C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.1\System.Net.Http”加载“Assembly”。 详细信息: 正在从路径“C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.1\PSHttpClient.psm1”加载模块。 < : 无法将“<”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后 再试一次。 所在位置 C:\Program Files\WindowsPowerShell\Modules\PSHttpClient\1.2.1\PSHttpClient.psm1:2 字符: 1 + <这里插入完整的模块代码> + ~ + CategoryInfo : ObjectNotFound: (<:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS C:\Users\Administrator> PS C:\Users\Administrator> # 验证安装 PS C:\Users\Administrator> if (Get-Command Invoke-EnhancedCurlRequest -ErrorAction SilentlyContinue) { >> Write-Host "`n=== 功能验证 ===" -ForegroundColor Green >> $result = Invoke-EnhancedCurlRequest -Uri "https://httpbin.org/get" >> Write-Host "状态码: $($result.StatusCode) $($result.StatusMessage)" >> Write-Host "内容长度: $($result.Content.Length) 字符" >> >> Write-Host "`n=== 模块已成功安装到自定义路径 ===" -ForegroundColor Green >> } else { >> Write-Host "`n!!! 安装失败 !!!" -ForegroundColor Red >> Write-Host "错误: $($Error[0].Exception.Message)" -ForegroundColor Red >> } >> === 功能验证 === 状态码: 200 OK 内容长度: 303 字符 === 模块已成功安装到自定义路径 === PS C:\Users\Administrator> # 示例路径(可修改为任何位置): PS C:\Users\Administrator> $customModulePath = "E:\PowerShellModules" # 使用E盘 PS C:\Users\Administrator> $customModulePath = "F:\MyTools\PSModules" # 使用F盘 PS C:\Users\Administrator> $customModulePath = "\\NAS\Shared\Modules" # 甚至网络位置 PS C:\Users\Administrator> PS C:\Users\Administrator>
08-17
PS C:\Users\Administrator> # ========== 配置部分 ========== PS C:\Users\Administrator> # 使用E盘作为模块安装路径 PS C:\Users\Administrator> $customModulePath = "E:\PowerShellModules\PSHttpClient" PS C:\Users\Administrator> $moduleName = "PSHttpClient" PS C:\Users\Administrator> $moduleVersion = "1.2.1" PS C:\Users\Administrator> $moduleDir = Join-Path $customModulePath $moduleVersion PS C:\Users\Administrator> PS C:\Users\Administrator> # ========== 安装前检查 ========== PS C:\Users\Administrator> # 确保E盘存在 PS C:\Users\Administrator> if (-not (Test-Path "E:\")) { >> Write-Host "错误:E盘不存在!" -ForegroundColor Red >> exit 1 >> } >> PS C:\Users\Administrator> # 清理旧模块(包括默认位置和自定义位置) PS C:\Users\Administrator> $defaultModulePath = Join-Path $env:ProgramFiles "WindowsPowerShell\Modules\$moduleName" PS C:\Users\Administrator> if (Test-Path $defaultModulePath) { >> Write-Host "正在删除默认位置的旧模块..." -ForegroundColor Yellow >> Remove-Item $defaultModulePath -Recurse -Force -ErrorAction SilentlyContinue >> } >> 正在删除默认位置的旧模块... PS C:\Users\Administrator> if (Test-Path $moduleDir) { >> Write-Host "正在删除自定义位置的旧模块..." -ForegroundColor Yellow >> Remove-Item $moduleDir -Recurse -Force -ErrorAction SilentlyContinue >> } >> 正在删除自定义位置的旧模块... PS C:\Users\Administrator> # 创建模块目录 PS C:\Users\Administrator> New-Item -Path $moduleDir -ItemType Directory -Force | Out-Null PS C:\Users\Administrator> PS C:\Users\Administrator> # ========== 创建模块文件 ========== PS C:\Users\Administrator> # 生成有效的GUID PS C:\Users\Administrator> $validGuid = [guid]::NewGuid().ToString() PS C:\Users\Administrator> PS C:\Users\Administrator> # 模块内容(修复所有问题) PS C:\Users\Administrator> $moduleContent = @' >> function Invoke-EnhancedCurlRequest { >> [CmdletBinding()] >> param( >> [Parameter(Mandatory=$true)] >> [string]$Uri, >> [ValidateSet('GET','POST','PUT','DELETE','PATCH','HEAD','OPTIONS')] >> [string]$Method = 'GET', >> [hashtable]$Headers = @{}, >> [object]$Body, >> [int]$Timeout = 30, >> [switch]$SkipCertificateCheck, >> [switch]$UseGzipCompression, >> [switch]$EnableHttp2 >> ) >> >> $stopwatch = [System.Diagnostics.Stopwatch]::StartNew() >> >> try { >> # 创建HttpClientHandler >> $handler = New-Object System.Net.Http.HttpClientHandler >> if ($SkipCertificateCheck) { >> $handler.ServerCertificateCustomValidationCallback = { $true } >> } >> if ($UseGzipCompression) { >> $handler.AutomaticDecompression = [System.Net.DecompressionMethods]::GZip >> } >> >> # 创建HttpClient >> $client = New-Object System.Net.Http.HttpClient($handler) >> $client.Timeout = [System.TimeSpan]::FromSeconds($Timeout) >> >> # 设置HTTP版本 >> if ($EnableHttp2) { >> $client.DefaultRequestVersion = [System.Net.HttpVersion]::Version20 >> } >> >> # 创建请求消息 >> $request = New-Object System.Net.Http.HttpRequestMessage([System.Net.Http.HttpMethod]::$Method, $Uri) >> >> # 添加请求头 >> foreach ($key in $Headers.Keys) { >> if (-not $request.Headers.TryAddWithoutValidation($key, $Headers[$key])) { >> Write-Warning "无法添加请求头: $key" >> } >> } >> >> # 添加请求体(如果存在) >> if ($Body) { >> if ($Body -is [string]) { >> $request.Content = New-Object System.Net.Http.StringContent($Body, [System.Text.Encoding]::UTF8) >> } >> elseif ($Body -is [System.Collections.IDictionary]) { >> $formData = [System.Collections.Generic.List[System.Collections.Generic.KeyValuePair[String,String]]]::new() >> foreach ($key in $Body.Keys) { >> $formData.Add([System.Collections.Generic.KeyValuePair[String,String]]::new($key, $Body[$key])) >> } >> $request.Content = New-Object System.Net.Http.FormUrlEncodedContent($formData) >> } >> elseif ($Body -is [byte[]]) { >> $request.Content = New-Object System.Net.Http.ByteArrayContent($Body) >> } >> } >> >> # 发送请求 >> $response = $client.SendAsync($request).Result >> >> # 读取响应内容 >> $responseContent = $response.Content.ReadAsStringAsync().Result >> >> # 返回结果对象 >> return [PSCustomObject]@{ >> StatusCode = [int]$response.StatusCode >> StatusMessage = $response.ReasonPhrase >> Content = $responseContent >> Headers = $response.Headers >> Technology = "HttpClient (.NET)" >> Protocol = $response.Version.ToString() >> ElapsedMs = $stopwatch.ElapsedMilliseconds >> } >> } >> catch { >> return [PSCustomObject]@{ >> StatusCode = 500 >> StatusMessage = "Internal Error" >> Error = $_.Exception.Message >> } >> } >> finally { >> $stopwatch.Stop() >> } >> } >> >> Export-ModuleMember -Function Invoke-EnhancedCurlRequest >> '@ >> PS C:\Users\Administrator> # 保存模块文件到E盘 PS C:\Users\Administrator> $moduleContent | Out-File "$moduleDir\$moduleName.psm1" -Encoding UTF8 -Force PS C:\Users\Administrator> PS C:\Users\Administrator> # ========== 创建模块清单文件 ========== PS C:\Users\Administrator> $manifestContent = @" >> @{ >> RootModule = '$moduleName.psm1' >> ModuleVersion = '$moduleVersion' >> GUID = '$validGuid' >> Author = 'PowerShell User' >> CompanyName = 'N/A' >> Copyright = '(c) $(Get-Date -Format yyyy). All rights reserved.' >> Description = 'Enhanced HTTP client for PowerShell' >> PowerShellVersion = '5.1' >> FunctionsToExport = @('Invoke-EnhancedCurlRequest') >> RequiredAssemblies = @('System.Net.Http', 'System.Web') >> } >> "@ >> PS C:\Users\Administrator> $manifestContent | Out-File "$moduleDir\$moduleName.psd1" -Encoding UTF8 -Force PS C:\Users\Administrator> PS C:\Users\Administrator> # ========== 更新环境变量 ========== PS C:\Users\Administrator> # 更新PSModulePath环境变量(当前会话和永久) PS C:\Users\Administrator> $currentModulePath = [Environment]::GetEnvironmentVariable('PSModulePath', 'User') PS C:\Users\Administrator> if (-not $currentModulePath.Contains($customModulePath)) { >> $newModulePath = $customModulePath + ';' + $currentModulePath >> [Environment]::SetEnvironmentVariable('PSModulePath', $newModulePath, 'User') >> $env:PSModulePath = $newModulePath >> } >> PS C:\Users\Administrator> # ========== 安装完成通知 ========== PS C:\Users\Administrator> Write-Host "`n=== 模块安装成功 ===" -ForegroundColor Green === 模块安装成功 === PS C:\Users\Administrator> Write-Host "模块路径: $moduleDir" -ForegroundColor Cyan 模块路径: E:\PowerShellModules\PSHttpClient\1.2.1 PS C:\Users\Administrator> Write-Host "版本: $moduleVersion" -ForegroundColor Cyan 版本: 1.2.1 PS C:\Users\Administrator> PS C:\Users\Administrator> # ========== 导入模块 ========== PS C:\Users\Administrator> Remove-Module $moduleName -ErrorAction SilentlyContinue PS C:\Users\Administrator> Import-Module $moduleName -Force -Verbose Import-Module : 未能加载指定的模块“PSHttpClient”,因为在任何模块目录中都没有找到有效模块文件。 所在位置 行:1 字符: 1 + Import-Module $moduleName -Force -Verbose + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (PSHttpClient:String) [Import-Module], FileNotFoundException + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand PS C:\Users\Administrator> PS C:\Users\Administrator> # ========== 功能验证 ========== PS C:\Users\Administrator> if (Get-Command Invoke-EnhancedCurlRequest -ErrorAction SilentlyContinue) { >> Write-Host "`n=== 功能验证 ===" -ForegroundColor Green >> try { >> $result = Invoke-EnhancedCurlRequest -Uri "https://httpbin.org/get" -Timeout 5 >> Write-Host "状态码: $($result.StatusCode) $($result.StatusMessage)" >> Write-Host "技术: $($result.Technology)" >> Write-Host "协议: $($result.Protocol)" >> Write-Host "耗时: $($result.ElapsedMs)ms" >> >> Write-Host "`n=== 模块已成功安装到E盘 ===" -ForegroundColor Green >> } >> catch { >> Write-Host "功能验证失败: $_" -ForegroundColor Red >> } >> } else { >> Write-Host "`n!!! 安装失败 !!!" -ForegroundColor Red >> Write-Host "错误: $($Error[0].Exception.Message)" -ForegroundColor Red >> exit 1 >> } >> === 功能验证 === 状态码: 200 OK 技术: HttpClient (.NET) 协议: 1.1 耗时: 1227ms === 模块已成功安装到E盘 === PS C:\Users\Administrator> # ========== 内存模块示例 ========== PS C:\Users\Administrator> Write-Host "`n=== 内存模块示例 ===" -ForegroundColor Magenta === 内存模块示例 === PS C:\Users\Administrator> PS C:\Users\Administrator> $moduleCode = { >> function Invoke-MemoryCurl { >> param( >> [Parameter(Mandatory=$true)] >> [string]$Uri >> ) >> >> try { >> $response = Invoke-WebRequest -Uri $Uri -UseBasicParsing >> return [PSCustomObject]@{ >> StatusCode = $response.StatusCode >> Content = $response.Content >> } >> } >> catch { >> return [PSCustomObject]@{ >> StatusCode = 500 >> Error = $_.Exception.Message >> } >> } >> } >> } >> PS C:\Users\Administrator> # 创建内存模块并导入 PS C:\Users\Administrator> $memoryModule = New-Module -Name "MemoryHttp" -ScriptBlock $moduleCode -Force PS C:\Users\Administrator> Import-Module -Module $memoryModule -Force PS C:\Users\Administrator> PS C:\Users\Administrator> # 正确调用内存模块函数 PS C:\Users\Administrator> $memoryResult = Invoke-MemoryCurl -Uri "https://example.com" PS C:\Users\Administrator> Write-Host "内存模块结果: 状态码 $($memoryResult.StatusCode) 内容长度 $($memoryResult.Content.Length)" 内存模块结果: 状态码 200 内容长度 1256 PS C:\Users\Administrator> PS C:\Users\Administrator> # ========== 临时模块示例 ========== PS C:\Users\Administrator> Write-Host "`n=== 临时模块示例 ===" -ForegroundColor Magenta === 临时模块示例 === PS C:\Users\Administrator> PS C:\Users\Administrator> $tempDir = Join-Path $env:TEMP "PSModules-$(Get-Random)" PS C:\Users\Administrator> New-Item -ItemType Directory -Path $tempDir -Force | Out-Null PS C:\Users\Administrator> PS C:\Users\Administrator> @' >> function Invoke-TempCurl { >> param([string]$Uri) >> (Invoke-WebRequest -Uri $Uri -UseBasicParsing).Content >> } >> '@ | Out-File "$tempDir\TempModule.psm1" -Encoding UTF8 >> PS C:\Users\Administrator> Import-Module "$tempDir\TempModule.psm1" -Force PS C:\Users\Administrator> $tempResult = Invoke-TempCurl -Uri "https://example.com" PS C:\Users\Administrator> Write-Host "临时模块结果: 内容长度 $($tempResult.Length)" 临时模块结果: 内容长度 1256 PS C:\Users\Administrator> PS C:\Users\Administrator> # 自动清理(60秒后) PS C:\Users\Administrator> Start-Job -ScriptBlock { >> Start-Sleep -Seconds 60 >> Remove-Item $using:tempDir -Recurse -Force >> } | Out-Null >> PS C:\Users\Administrator> Write-Host "`n=== 所有操作完成 ===" -ForegroundColor Green === 所有操作完成 === PS C:\Users\Administrator>
08-17
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值