首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

操作系统

Windows 9X | Linux&Uinx | Windows Server | 其它操作系统 | Vista | FreeBSD | Windows 7 |
首页 > 操作系统 > Windows Server > Windows PowerShell有关字符串的事 > 正文

Windows PowerShell有关字符串的事

出处:microsoft 作者:microsoft 时间:2008-1-16 10:06:09
 一件让Windows PowerShell同其它外壳程序(特别是传统的Unix外壳程序)区别开来的事是:现在大多数操作系统外壳程序是基于文本的,Windows PowerShell是基于对象的。如同你可能期待的,这两种观点有各自的优缺点;然而通常意义上,公正的说比起它的操作系统同伴们的外壳程序而言,Windows PowerShell需要更少的文本及字符串操作。

  那么这意味永远不需要在Windows PowerShell中处理文本和字符串操作吗?不,抱歉:文本及字符串操作对于任何一个写系统管理脚本的人来说仍然是需要的。幸运的是,Windows PowerShell(及.NET Framework)包含了各种为了操作文本及字串值的所有漂亮的小功能的集合。让我们看一些你能针对文本所做的有趣的事。因此,我们准备主要处理以下变量及值:

  $a = "Scripting Guys"

  $b = "scripting guys"

  比较两个字符串值

  那么什么样的事需要你来处理字符串值呢?好的,一件非常普通的任务就是比较这些值。以下命令比较了字符串变量$a和$b,然后把结果储存在第三个变量($d):

  $d = $a.CompareTo($b)

  如你所见,我们简单的使用$a及调用CompareTo方法,并传递第二个字符串($b),作为方法参数。如果CompareTo返回0,那意味着两个字符串相等。0以外的任何值意味着两个字符串不相等。(技术上来说,-1意味着$a小于$b,1意味着$a大于$b)

  当我们运行这个命令并回显$d的值的时候我们会得到以下输出:

  1

  这意味这两个字符串不相等。

  怎么会这样?你们的一些人也许会认为两个字符串没什么不同的。好的这和你是否进行大小写敏感比较相关(大写的S被认为和小写的s不同),或者大小写不敏感比较,这意味着大写S同小写s被认为是一样的。

  Compare方法总是进行大小写敏感比较。为了进行大小写不敏感比较,那么使用以下命令作为替代:

  $d = [string]::Compare($a, $b, $True)

  在本例中,我们使用.Net Framework的System.String类(也就是[string]语法所指出的)。我们然后调用静态方法(以两个冒号::指出)Compare,并传递给这个方法三个参数:两个我们想要比较的字符串($a及$b)然后是布尔值$True。第三个参数告诉Compare方法是否在进行比较时忽略字母的大小写。值$True意味着应当忽略字母的大小写。运行这个命令以后$d的值将会等于:

  0

  这意味着,在你忽视大小写的情况下,两个字符串是相等的。

  你也能使用StartsWith及EndsWith方法来快速确定在指定值的开始或结束是否包含指定字符串。想要知道$a的值的开头是否包含字符串Script?那么使用这个命令吧:

  $d = $a.StartsWith("Script")

  结果是,如果目标文本被找到$d将会是True,如果没有则为False。

  或者检查在值尾是否有目标文本:

  $d = $a.EndsWith("Script")

  注意这些比较也是大小写敏感的。如果要做大小写不敏感比较则使用下面这个类似的命令:

  $d = $a.ToLower().StartsWith("script")

  ToLower方法代表什么呢?我们马上会解释的。

  改变文本大小写

  如我们刚才所见,字母大小写有时是很重要的。因此,你可能想要使用ToUpper或者ToLower方法来转换所有字符串值中的字母至同样的字母大小写。那么字母大小写将不会影响你做的任何比较。为了转换所有的字符串中的字符至大写相当于我们使用这个命令:

  $d = $a.ToUpper()

  因此,$d将会等于以下内容:

  SCRIPTING GUYS

  反之,使用ToLower方法将转换字母至小写格式。这个命令将先前的全部都是大写字母的至转换成小写值:

  $d = $d.ToLower()

  运行这个命令,$d将会等于以下内容

  scripting guys

  瞧见了吧?我们说了我们一会儿会解释ToLower方法是什么意思的。

  检查字符串中是否包含某个字符串

  那么人们还对字符串值做什么呢?好的,一个普通的任务是判断给定的子字符串是否能在该值中任意处找到。例如,假设你需要知道字符串ript是否出现在$a(如你回想起的那样,该值是Scripting Guys)值的任意位置。我们怎么样判断呢?像这样:

  $d = $a.Contains("ript")

  我们在这里所做的是使用$a并调用Contains方法,并传递目标文本(ript)做为唯一的方法参数。如果目标本文能被找到,那么Contains方法返回True(本例中可以),反之则返回Flase。

  注意到Contains方法总是采取大小写敏感搜索是很重要的。如果我们查找字符串RIPT,Contains将会告诉我们这个文本不能被找到。那么如果我们关心字母大小写,只关心实际字符本身呢?好的,一种处理这个问题的方法是将两个字符串变量($a)及目标文本(RIPT)都转换成小写或者大写字符。以下命令返回True值:

  $d = $a.ToLower().Contains("RIPT".ToLower())

  替换字符串中的文本

  如果你精读Hey, Scripting Guy! archive(当然,你应当经常精读Hey, Scripting Guy! archive)你也许会惊讶于许多脚本要求你用一个文本替换另一个文本。例如,假设$a被赋了以下值:

  $a = "The Scriptign Guys"

  这不好,我们把Scripting拼错了。但是不要紧,这修正起来很简单:

  $a = $a.Replace("Scriptign", "Scripting")

  如你所见,所有我们所做的是赋给$a新值:即当我们调用Replace方法后的值。注意我们传递给这个方法两个参数:我们想要替换的值(Scriptign)及用来替换的文本(Scripting)。在我们运行这个命令以后$a将会等于以下内容:

  The Scripting Guys

  下面是另外一个例子。假设$a等于这个:

  $a = "Microsoft Scripting Guys"

  假设我们想要摆脱Scripting Guys。(相信我们,我们知道Microsoft内部很多人想要这么做。)好的,我们再次调用Replace方法,这次我们指定空字符串(””)做为替换文本(也包括Scripting前的空格):

  $a = $a.Replace(" Scripting Guys", "")

  再次,我们运行这个命令,Scripting Guys将会消失,$a将会等于以下内容:

  Microsoft

  要是现实中有那么简单就好了,嗯?

  返回字符串的位置

  有些时候你不想要整个字符串的值:你只想要该字符串值的位置。例如,当你处理活动目录的时候你经常得到看起来和下面类似的输出:

  $e = "CN=Ken Myer"

  那么,你经常发现你自己一直在写代码来去除每个名字前的CN=。想要找一个更简单的办法?那么你来对地方了:

  $e = $e.Substring(3)

  所有我们在这里所做的是取得我们的字符串变量然后调用Substring方法。我们传递给Substring一个参数:我们想要开始提取字符的开始位置。如果我们传递给Substring一个3(如我们所做的)这意味着我们想要从位置3开始提取字符,然后因为我们没有提供可选的第二个参数,我们想要一直提取字符知道我们到达字符尾。因此,这意味着$e将会等于:

  Ken Myer

  啊,问得好:在Ken Myer中的K是字符串中的第四个字符,那为什么我们不传递给Substring一个4做为参数?

  无论相信与否,关于这个问题有一个简单的解释:字符串中第一个字符被认为是字符0;字符被以下方式编号:

  012345678910

  CN=Ken.Myer

  这就是我们为什么传递3而不是4的原因。

  那关于那个神秘的第二参数呢?事实上,它也没有那么神秘;这个参数告诉Substring方法有多少字符将被提取。在Substring中包含这个参数将会提取指定数量的字符。省去这个参数,那么Substring将从指定的字符位置开始并提取字符串中剩下的所有字符。

  记住这点,我们再次处理下我们$e的原始值(CN=Ken Myer),你猜当我们运行这个命令后$呃将会等于什么:

  $e = $e.Substring(3,3)

  你会得到:

  Ken

  额外提示

  考虑下包含以下内容的一个文件夹(对数码相机用户来说是很熟悉的):

  HIJK_111112.jpg

  HIJK_111113.jpg

  HIJK_111114.jpg

  HIJK_111115.jpg

  假设我们想要移除每个文件的HIJK_前缀。你怎么做呢?好的,这里有一个方法,使用字符串值取代了文件系统对像及文件名属性(尽管方法是相同的):

  $d = "HIJK_111112.jpg"

  $e = $d.TrimStart("HIJK_")

  将字符串变为数组

  无论相信与否,当你找到有效的将字符串值转换成数组时总是很好的。例如,假设我们一部分像这样的数字:

  $e = "9BY6742W"

  很可能在这部分中的每一个字符都有特定的含义;例如,也许第一个字符(9)代表了设备的制造工厂。在像这样的例子中,你可能想要独立的查找每个字符,如果整个字符串被转换为包含单个字符的数组那将是很简单的。但是,你如何转换一个字符串值至独立的字符数组?
 我们很高兴你能问这个问题:

  $d = $e.ToCharArray()

  如你所见,我们简单的字符串变量$e并调用ToCharArray方法(没有必须的参数)。当我们使用这个方法后$d将会怎么样呢?看上去比较糟糕:

  9

  B

  Y

  6

  7

  4

  2

  W

  下周见。

  英文原文

  http://www.microsoft.com/technet/scriptcenter/resources/pstips/sept07/pstip0921.mspx

相关文章 热门文章
  • 文件共享的12条军规——多一点规划可以使你的共享文件夹环境更合理
  • Exchange2007通过PowerShell批量创建用户邮箱指定组成员邮箱
  • PowerShell命令解释器技巧
  • PowerShell脚本优化技巧
  • Windows PowerShell改变Exchange Server 2007管理工作
  • PowerShell 经典脚本贮藏室
  • Windows PowerShell 講座 (9)—模組化
  • 精通Windows Server 2008 多元密码策略之PowerShell篇
  • 通过PowerShell批量创建用户邮箱
  • Windows PowerShell 講座 (8)—迴圈與流程控制
  • Windows PowerShell 講座 (7)—運算子(下)
  • Windows PowerShell講座(6)—運算子(上)
  • “http 500内部服务器错误”的解决方法
  • 利用Windows 2000 Server的RRAS实现VPN服务器
  • 用凤凰万能启动盘解决本地/域管理员密码丢失
  • Win2003 Server企业版安装配置
  • Active directory 灾难恢复
  • Windows 2000/03域和活动目录
  • 如何在vmware4上创建windows 2003群集
  • MSI文件制作全过程
  • Win2000命令全集(一)
  • Windows 2000/AD技巧
  • 此系统的本地策略不允许您采用交互式登录解决方法
  • Win2000路由的安装与设置实现不同网段互通
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号