1.创建集合和泛型
a.创建List集合
#为了减少在同意命令空间的对象名的输入,可以使用-f操作符指定唯一的类名。
$namespace = "System.Collections.{0}";
$arrayList = New-Object ($namespace -f "ArrayList");
$queue = New-Object ($namespace -f "Queue");
$arrayList.Add("a");
$queue.Enqueue("b");
或者(使用ArrayList管理动态项的集合)
$arrayList = New-Object System.Collections.ArrayList;
[void]$arrayList.Add("a");
[void]$arrayList.Add(1);
[void]$arrayList.AddRange(("hello","world","china"));
b.创建泛型
$coll = New-Object 'System.Collections.ObjectModel.Collection`1[System.String]'
$coll.Add("aaaaaa");
$coll.Add($true);
$coll.get_Count();
c.创建一个HashSet的集合
Add-Type -ReferencedAssemblies System.Core @'
using System.Collections.Generic;
public class VirtualMachine {
public string Name;
public string HostName;
public HashSet<string> Dependencies = new HashSet<string>();
}
'@
$virtual = New-Object VirtualMachine;
$virtual.Dependencies.Add("a");
$virtual.Dependencies.Add("b");
$virtual.Dependencies.Add("a");#添加失败,不允许重复,返回False。
f.#在powershell中创建一个hashTable(不允许存放重复的值)
$hash = @{"key" = "value"};
或$has = @{key = 1;value = "aaaaa"};
$hash = @{}创建空哈希表
$hash.key1 = 1 将1赋给键key1
$hash.key1和$hash["key1"] 返回key1的值
$hash.Add(1,"aaa");
$hash.Add(2,"bbb");
$hash.Add(3,"ccc");
$hash.Add("ffff","ddd");
#使用foreach遍历keys/value
foreach($obj in $hash.Keys){
"key = " + $obj ;
" value = "+ $hash[$obj] ;
}
遍历的值:
key = 3
value = ccc
key = key
value = value
key = 2
value = bbb
key = 1
value = aaa
#使用enumerator遍历keys
[System.Collections.IEnumerator]$keys = $hash.Keys.GetEnumerator() ;
while($keys.MoveNext()){
"key = " + $keys.Key ;
" value = "+ $keys.Value ;
}
#使用hashtable的copyTo
[System.Object[]]$array=New-Object System.Object[] -ArgumentList $hash.Count;
$hash.CopyTo($array,0);
foreach($item in $array)
{
"key:"+$item.Key;
"value:"+$item.Value;
}
# discarding output using Out-Null输出重定向
dir | Out-Null
dir > $null # this is equivalent to the above
# Out-GridView uses a graphical interface to display the data
Get-Process *ss | Out-GridView
类似map集合
$a = [collections.generic.dictionary[string,int]] ;
$a.Set(1,"aaaa");
$a.Set(2,"bbbb");
$a.Set(3,"cccc");
$a.Set(2,"dddd");
$a.Get(2); ---->输出:dddd
2.创建一个多行或格式化的字符串
$myString = @'
this is the first line !
this is the second line !
this is the third line !
'@
b.使用here string 实现多行注释
$null = @'
function myTest
{
"this should not be considered a function" ;
}
'@
c.向字符串中插入动态信息
$header = "Report for Today"
$myString = "$header `n -------------"
$myString
d.向字符串中插入动态信息(使用powershell的格式化操作符)
$myString = "{0} `n {1}" -f $header , ('-' * $header.Length)
注意:字符串格式设置符(-f)使用与.NET框架中的String.Format()方法相同的字符串格式作为规则。
3.使用Get-Date命令的-Format参数
$getDate = Get-Date -Date '05/09/2012 1:23 PM' -Format 'dd-MM-yyyy hh:mm:ss'
使用字符串格式化(-f)运算符:
$date = [DateTime] '03/27/2021 1:19 PM';
$getDate = '{0: dd-MM-yyyy hh:mm:ss}' -f $date
对象的ToString()方法
$getDate = $date.ToString("dd-MM-yyyy hh:mm:ss");
4.将文本添加到字符串的结尾对与小型到中型字符串效果非常好,但是对较大的字符串会造成极大的性能问题
Measure-Command{
$output = New-Object System.Text.StringBuilder;
1..10000 | % { $output.Append("Hello World")}
}
TotalSeconds : 1.5562987
Measure-Command{
$output = ""
1..10000 | % { $output += "Hello World"}
}
TotalSeconds : 4.2449152
5.运算:powershell中两个整数相除,如果需要的话返回浮点型的结果。
将浮点型转换成整型需要"四舍五入"。
$a = 3/2 返回:1.5
$a = [int]3/2 返回:2
b.计算任意的根
function root ($number, $root){
[System.Math]::Exp($([Math]::Log($number)/$root));
}
root -number 125 -root 3
c.使用度而不是程序弧度为单位
function Convert-RadiansToDegrees($angle) {$angle/(2*[Math]::PI)*360 }
function Convert-DegreesToRadians($angle) { $angle/360 * (2*[Math]::PI) }
Convert-RadiansToDegrees([Math]::PI) 返回:180
Convert-DegreesToRadians -angle 360
[Math]::Tan([Math]::PI/4);
[Math]::Tan((Convert-DegreesToRadians -angle 45)) 返回1
6.在不同的进制间转换数字
a.直接输入一个十六进制数字,使用0x前缀:
$hexNumber = 0x1234 返回:4660
b.将数字转换为二进制表示,向[Convert]::ToString()方法提供2为基数
[Convert]::ToString(1234,2); 返回:10011010010
c.将二进制数字转换为十进制表示,向[Convert]::ToInt32()方法提供2为基数
[Convert]::ToInt32("10011010010",2); 返回:1234
d.将十六进制数转化为十进制表示形式,需要在数字前加入前缀0x
$myErrorCode = 0xFE4A 返回:65098
f.将数字转化为八进制表示形式,向[Convert]::ToInt32()方法提供参数8为基数。
[Convert]::ToInt32("1234",8); 返回:668
或[Convert]::ToString(1234,8); 返回:2322
g.将数字转换到十六进制表示形式,使用[Convert]类或powershell的格式运算符:
[Convert]::ToString(1234,16); 返回:4d2
"{0:X4}" -f 1234 ; 返回:04D2
7.(Measure-Object)度量一个列表的统计属性
默认情况下Measure-Object命令只统计它收到对象的个数,如果你要测量这些对象中的
其他属性(如最大值、最小值、平均值、总和、字符、单词或行),则需要命令提供选项。
-Property参数来测量得到要测量的属性。
例如:Get-ChildItem > output.txt
Get-Content output.txt | Measure-Object -Character -word -Line
Get-ChildItem | Measure-Object -Property Length -Max -Min -Average -Sum
8.编写脚本块:把不同的逻辑放到一个脚本块中,然后将脚本快作为一个参数传给需要它的代码,使用调用操 作符(&)来执行这个脚本块。
在管道中应用脚本块
Function Map-Object{
Param([ScriptBlock]$mapCommand)
Process
{
& $mapCommand
}
}
调用:1,2,3 | Map-Object { $_ * 2 } 返回2,4,6
注意:为了从一个脚本或函数返回数据,需要把改数据写入输出管道。但也可以使用传统的关键字return。如果不想该类的方法有返回值。可以在该方法前面加入[void]来避免返回值。
[void]$arrayList.Add("hello");
2.在脚本中若需要使用引用其他的脚本在这个脚本中使用".()"引入这个库文件。
例如:.(Join-Path $scriptDirectory test.ps1)
9.用命令关键字编写脚本
注:使用begin、process和end关键字,把你的脚本分成初始化、处理和清除几个区域。
Function Method{
begin{#初始化操作}
process{#处理操作}
end{#清理操作}
}
分享到:
相关推荐
PowerShell是一种强大的脚本语言,广泛用于Windows系统的管理和自动化任务。它提供了丰富的命令和函数,其中包括使用正则表达式进行字符串匹配和文件查找的功能。正则表达式是一种定义搜索模式的文本模式,能够对...
Empire是一款强大的、开源的 PowerShell 后渗透测试框架,由 Python 编写,主要用于网络攻防演练、红蓝对抗等安全场景。它允许安全研究人员在Windows、Linux和Mac OS平台上创建自定义的 PowerShell 模块,进行隐蔽的...
### Exchange 2007 学习笔记关键知识点解析 #### 一、服务器角色 **1. 邮箱服务器角色** - **定义**: 主要处理用户的邮箱数据,包括存储和管理用户邮件。 - **特点**: - MAPI客户端(如Outlook)通过RPC协议直接...
### SQL Server 2012 性能学习笔记 #### SQL Server 2012 新特性及简介 SQL Server 2012 是微软推出的一个重要版本,它引入了许多新特性和改进,旨在提高数据库系统的可用性、安全性、可管理性以及性能。以下是几...
3. **1Password API**:学习如何与1Password的RESTful API进行交互,获取和更新数据。 4. **身份验证和安全**:掌握如何安全地处理和存储用户凭证,以及如何进行身份验证。 5. **JSON解析**:使用.NET中的类库,如...
在"Python学习笔记(2)"中,我们涵盖了多个关键主题,包括基础入门、数据类型、字符串处理、数据字典、控制语句、函数、文件和目录操作,以及一些特定模块的专题讨论。以下是对这些知识点的详细说明: 1. **入门**:...
无论是Windows的PowerShell还是Linux/macOS的终端,它们都提供了类似的一系列命令。例如,`pwd`用于显示当前工作目录,`hostname`显示计算机在网络中的名称,`mkdir`用于创建新的目录,`cd`用于切换目录,`ls`用于列...
### SQL Server 2008 学习笔记关键知识点概览 #### 一、SQL Server 2008 安装与配置 ##### 1.1 版本介绍 - **企业版**: 面向大型企业,提供最全面的功能。 - **标准版**: 提供核心的数据管理和业务智能功能。 - **...
- **PowerShell**:使用`Get-WmiObject` cmdlet,如 `$creds = New-Object System.Management.Automation.PSCredential` 创建凭据对象,然后通过`-Credential`参数指定身份验证信息。 - **Windows Credentials ...
云管理员需要使用Azure门户进行管理,并随着经验的积累,逐渐过渡到使用PowerShell和命令行界面。一个成功的云管理员需要有操作系统、虚拟化、云基础设施、存储结构和网络方面的丰富经验。 在Azure订阅管理方面,...
### Java学习笔记 #### Part1: Java入门 ##### Day1: Java基础知识概览 ###### 一、人机交互方式 人机交互是计算机科学的重要组成部分,主要包括两种方式: 1. **图形化界面(GUI)**:包括Windows视窗操作、...
学习和使用这些PowerShell脚本可以帮助你提升系统管理效率,理解PowerShell的工作机制,并且在需要时能够编写自己的自动化脚本来解决特定问题。无论你是初学者还是经验丰富的IT专业人士,这个"PowerShell-master...
以管理员身份运行 PowerShell,并输入 set-executionpolicy remotesigned ,再输入“y”如图: 再次返回到VsCode中就可以使用虚拟环境库 分析原因: Windows PowerShell默认是Restricted(防止运行没有数字签名的...
【ArcGIS API for Python学习笔记(一)环境配置】 在开始使用ArcGIS API for Python时,需要先搭建好相应的开发环境。这篇学习笔记主要记录了环境配置的过程,旨在帮助初学者避免遇到常见问题。以下是对笔记内容的...
4. **命令提示符或PowerShell**:对于技术爱好者,可以通过运行命令提示符或PowerShell,并输入`netsh wlan set hostednetwork mode=allow`来开启WiFi,关闭则使用`netsh wlan set hostednetwork mode=disallow`。...
【标题】 "MyPoSH:我学习和收集的笔记和脚本" 涉及的知识点主要集中在PowerShell这一强大的命令行工具上。PowerShell是微软开发的一种任务自动化和配置管理框架,它集成了命令行界面和脚本语言,特别适用于系统管理...
3. PowerShell常用参数 - -ExecutionPolicy bypass:绕过执行安全策略。 - -WindowStyle Hidden:隐藏窗口。 - -NonInteractive:不提供交互式提示。 - -NoProfile:不加载当前用户的配置文件。 - -NoExit:执行后不...
学习和理解NoteLibrary的源代码,不仅可以提升你的PowerShell技能,也能帮助你建立一个个性化的知识管理系统,让你的笔记管理和学习过程更加高效。对于系统管理员、开发者以及任何需要整理和保存大量信息的人来说,...
3. **数字和数学计算**:学习Python中的算术运算符,包括加减乘除、取余和幂运算,以及如何进行数学计算。 4. **变量和命名**:理解变量的含义和使用,以及如何遵循命名规则。 5. **字符串和文本**:学习字符串的...
例如,`CMD`中的命令可与PowerShell结合,提供更强大的功能。此外,通过`CMD.exe`的命令行参数,可以在启动时指定工作目录或运行特定命令。 六、学习资源 对于想要深入学习DOS的用户,可以参考MSDN(Microsoft ...