澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

何以那么些SQL,PowerShell的三大习认为常难点及减

2019-12-12 作者:服务器运维   |   浏览(97)

随着Windows Server 2012的发布,PowerShell作为脚本语言,将成为命令行接口的新规范。拥有超过2300条命令的PowerShell可以更容易的实现任务自动化,为管理员节省宝贵的时间。

在 Windows PowerShell 争取得到管理员接受方面,认知一向是我们所面临的最大问题。长期以来,管理员对该 shell 的认知是,它与 VBScript 一样都是“脚本编写语言”。虽然由于脚本编写语言可被用于完成大量操作而深受许多管理员喜爱,但由于其复杂性和陡峭的学习曲线,也使很多管理员望而却步。

为什么这个SQL Server DBA学习PowerShell

但是,当管理员遇到PowerShell错误时要怎么处理?如何才能将其修复?PowerShell专家Don Jones将通过处理一些常见的PowerShell错误来指导大家如何解决这些问题。

这令人感到非常可惜。该 shell 支持基于脚本的强大功能,但同样也支持更简单的、以命令为导向的功能。该 shell 的真正吸引人之处在于您可以使用上述任何一种方法来完成大量同样的工作。

图片 1

powershell版本

原文出自:http://www.simple-talk.com/sql/database-administration/why-this-sql-server-dba-is-learning-powershell/

为什么PowerShell命令能够在本地正常运行,却无法在远程运行?

仅仅是一个脚本

下列函数将从命令行处以字符串或输入对象的“ComputerName”属性的方式接受计算机名称;它还会使用 Windows Management Instrumentation (WMI) 从每台计算机检索 BIOS 和 OS 信息。

function Get-Inventory
{
   [CmdletBinding()]
   Param(
       [Parameter(Mandatory=$true,
                 ValueFromPipeline=$true,
                 ValueFromPipelineByPropertyName=$true)]
       [string] $computername
   )
   Process {
      $os = gwmi win32_operatingsystem -computername $computername
      $bios = gwmi win32_bios -computername $computername
      $obj = new-object psobject
      $obj | add-member noteproperty ComputerName $computername
      $obj | add-member noteproperty OSBuild ($os.buildnumber)
      $obj | add-member noteproperty SPVersion ($os.servicepackmajorversion)
      $obj | add-member noteproperty BIOSSerial ($bios.serialnumber)
      Write-output $obj
   }
}

请注意,圆括号会强制 shell 执行表达式例如从 $os 变量的对象中获取 BuildNumber 属性),并将该表达式的结果作为 Add-Member 的第三个参数值返回。

我也可以通过管道输入静态计算机名称来运行此函数:

'localhost','server2' | Get-Inventory

或者,通过发送每行包含一个计算机名称的文本文件的内容来运行此函数。

Get-Content names.txt | Get-Inventory

或者甚至是通过从 Active Directory 检索计算机对象、将“名称”属性更改为 ComputerName,并通过管道传输下列内容:

Import-Module ActiveDirectory
Get-ADComputer –filter * | Select-Object @{Label='ComputerName';Expression={$_.Name}} | Get-Inventory

另外,我使用括号来封装可执行代码。$_ 占位符代表通过管道输入 Select-Object cmdlet 的对象。上述操作的结果均为格式简洁的表,包含四列。我可以轻松地将上述输出重定向至文件、打印机或网格,或者甚至是在显示结果之前对其进行筛选和排序。例如,

Get-Content names.txt | Get-Inventory | Where { $_.BuildNumber –eq 7600 } | Sort ComputerName

再次重申,括号封装一个可执行代码块,即我希望筛选的表达式,而 $_ 占位符代表通过管道传入的对象。

Windows服务器管理员们即将用上PowerShell的最新版本:4.0。

如果您的系统是window7或者Windows Server 2008,那么PowerShell 2.0已经内置了,可以升级为3.0,4.0。
如果您的系统是Windows 8 或者Windows server 2012,那么PowerShell 3.0已经内置了,可以升级为4.0。
如果您的系统为Windows 8.1或者Windows server 2012 R2,那默认已经是4.0了。

Joe.TJ翻译整理,仅用于传播资讯之目的。

对于管理员来说,远程处理是在远程计算机上运行命令的绝佳方式。Jones甚至将PowerShell远程处理功能称为管理的“未来方式”。但Windows Server 2012的远程处理有几个困难需要克服。

命令性能

类似那样的脚本并没有错误,但是需要处理大量工作。对于这种脚本编写人员或者说程序员式方法,许多管理员都认为任务过于繁重。通过一个稍微复杂的命令也可以完成同样的任务。打起精神来:

Get-WmiObject Win32_OperatingSystem -computername (get-content names.txt) | 
Select-object @{Label="ComputerName";Expression={$_.__SERVER}},
             @{Label="OSBuild";Expression={$_.BuildNumber}},
             @{Label="SPVersion";Expression={$_.ServicePackMajorVersion}},
             @{Label="BIOSSerial";Expression={(gwmi win32_bios -comp $_.__server).serialnumber}}

这里要完成许多操作。下面是操作详解:

在某种程度上,此语法比我所启动的脚本更难读。它比较紧凑,并使用了大量标点符号。您可以将其用作模板,并根据您的需要进行修改。如果您不明白为什么它无法工作,请在我的 ConcentratedTech.com 博客上提问,我会为您解答。

Microsoft Windows PowerShell 4.0是脚本语言的最新版本,包含在Windows Server 2012 R2操作系统中,并且向后兼容早期的PowerShell版本。

  Windows Management Framework 4.0

     我开始学习PowerShell,是因为我在寻找一种快速和高效的方式收集有关我的SQL Servers的信息和更好地管理我的服务器工作负载的方式。我以为,我正在学习是另一门新的脚本语言,它能帮我做到前面提到的设想。实际上,我发现学习PowerShell,不仅提供了一种强大的手段去实现许多常规和重复性的服务器任务和健康检查;也是一个提高我其它方面技能的有用的跳板。例如,在我学习PowerShell时,我发现:

解决此问题的方式有多种。首先要确认远程运行的命令是否存在于远程的服务器中。另外当你运行命令时,时间的准确性也相当重要。最后还需要检查一下这条命令是否是外部命令,避免远程服务器因此而出错。

不要将它称为脚本

我的意思是我们不必将 Windows PowerShell 作为脚本语言使用。我演示的命令可能复杂,但也不会比我所见到的管理员为旧式 Cmd.exe shell 编写的冗长命令更复杂。虽然需要进行一些训练,但熟悉其语法之后,与编写完整的脚本或函数相比,该命令要简单的多。

因此,请不要看到“脚本语言”便不愿采用该 shell。您可以选择使用脚本编写较为简单的功能。

图片 2

Don Jones 是 Concentrated Technology 的创始人,他会在 ConcentratedTech.com 解答有关 Windows PowerShell 和其他技术的问题。他也是 Nexus.Realtimepublishers.com 的撰稿人,他的许多著作还在他的网站上以电子版的形式提供。

原文地址

查看更多相关文章

Windows PowerShell 争取得到管理员接受方面,认知一向是我们所面临的最大问题。长期以来,管理员对该 shell 的认知是,它与 VBScript 一样都...

我们为刚刚开始接触脚本语言、希望了解4.0版或者寻求提示与技巧的Windows服务器管理员们准备好了PowerShell教程。

启动 Windows PowerShell ISE  Integrated Scripting Environment**

♦  提高了我关于.NET的认识,这样我就能够更好地与我所支持的应用程序开发人员交流。

如果所有方法都无法奏效,问题可能就是Jones所说的“环境障碍”,这需要单独的步骤进行排错。

PowerShell 4.0的重要变化

在 Windows Vista、Windows Server 2008 和更高版本的 Windows 中,在“开始”菜单中,依次单击“开始”、“所有程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell ISE”项。
在 Windows XP 和 Windows Server 2003 中,若要启动 Windows PowerShell,请在“开始”菜单中依次单击“开始”、“程序”、“附件”、“Windows PowerShell”文件夹和“Windows PowerShell ISE”项。
在 Windows PowerShell 控制台、Cmd.exe 或“运行”框中,键入“powershell_ise.exe”。

♦  学会了如何使用 Server Management Objects (SMO) 来实现数据库相关任务的自动化执行。

为何无法比较 PowerShell的变量内容?

你是否对于频繁手动操作服务器已经厌倦?

PowerShell中没有文件的概念,只有项【Item】的概念,像Windows驱动器、目录、文件、注册表、变量等信息都被抽象成了"项"的概念,PowerShell使用"项"来进行统一管理。本次我们只关注文件系统,即目录、文件,其他系统后续篇章再做了解。
关于文件系统的命令有如下一些:
New-Item
Copy-Item
Move-Item
Remove-Item
Rename-Item
Invoke-Item
当然,这些命令不仅仅用于文件系统,像驱动器、注册表等都可以使用,本次我们只从文件系统的角度去关注这些命令。

♦  学会了 Windows Management Instrumentation (WMI)相关的知识,它能允许我只使用一条信息就查询多一台或者多台服务器。

无法比较PowerShell变量的内容有多种原因。首先,某些PowerShell命令返回的结果将多于你的请求。例如,Dir命令可以返回多个对象和多种类型的对象。其次,一些命令,如$file,几乎总是会返回多种类型的对象,而像-like这样的PowerShell运算符则不能针对多个对象运行。

PowerShell 4.0引入的新变量让管理任务更加自动化、更容易执行。

执行powershell脚本
PowerShell[.exe] -Help | -? | /?

♦  更加适应OOP.

要解决这个问题,可以通过写一条命令来枚举文件,这样可以让用户每次只比较一个对象。如果你一直在使用PowerShell,可以有多种方式来做到这一点。

版本4.0的重点在于管理功能的自动化,如理想状态配置,可以将相同的角色和设置应用到多个节点,并向服务器管理员提供更易于运行的已签名脚本。

Restricted——默认的设置, 不允许任何script运行
AllSigned——只能运行经过数字证书签名的script
RemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名
Unrestricted——允许所有的script运行
windows默认不允许任何脚本运行,你可以使用"Set-ExecutionPolicy"cmdlet来改变的你PowerShell环境。例如,你可以使用如下命令让PowerShell运行在无限制的环境之下:
PS C:Usersfltps> Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy : 对注册表项“HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell”的访问被拒绝。 要更改默认(LocalMachine)作用
域的执行策略,请使用“以管理员身份运行”选项启动 Windows PowerShell。要更改当前用户的执行策略,请运行 "Set-ExecutionPolicy -Scope CurrentUser"。
PS C:Usersflt> Set-ExecutionPolicy Unrestricted -Scope CurrentUser
或者输入以下命令:runas /noprofile /user:Administrator cmd
但是我的管理员账号没有密码,无法切换到administrator权限,显示无法启动服务。
看来这种通过的方法对于没有设置管理员密码的电脑还是有点问题。

 

一种方式是构造法(如使用Foreach),它可以接受多个对象,然后逐个进行比较。另一种方法则是使用命令的方式(非脚本方式)来进行处理。

在4.0版本仍然会导致混淆的一个功能是PowerShell工作流,由Windows Workflow Foundation规则驱动的一种PowerShell功能。

使用java调用powershell脚本,可以使用以下命令:
String cmd = "cmd /c powershell -ExecutionPolicy RemoteSigned -noprofile -noninteractive -file ""

      在这篇文章里,我描述了一些使用PowerShell的例子,同时希望这些对DBA有用。我的脚本将会演示在一台或多服务器如何执行SQL查询,WMI查询和SMO代码,以及帮助您更好的管理多台数据库服务器。所有脚本均在SQL Server 2005中测试通过。

为什么当我尝试访问一个文件时,PowerShell会出错

工作流允许管理员在脚本代码中同时运行多个任务,但不支持某些PowerShell功能。

  • scriptFilename """;

      本文的目的不是写成一份PowerShell教程。我假设您已经熟知以下内容:基本的PowerShell语法,如何使用cmdlets获取帮助,命令行是如何工作的,如何运行脚本,命名管道是什么,别名是什么等等。如果您不知道这些内容,你可以在各种线上文章,新闻组和博客中找到大量的帮助(文章结尾引用章节中列出了部分资源)。这篇文章中的部分脚本来源于我阅读这些资源时遇到的。

如果你在试图访问一个文件时,总是遇到问题,部分原因可能是使用PowerShell访问文件的方式有问题。在这个问题上要牢记的最重要的一点就是大多数PowerShell命令的输出是对象,而输入参数可能无法接受整个对象。

如果你花些时间学习其运行规则,你会从PowerShell工作流上获得更好的自动化和灵活性。

一.最通常的运行脚本的方法是调用它:
PS C:> & "C:BelfryMy first Script.ps1"  
注意: 这里的"&"操作符能允许你调用一个命令, 脚本, 或函数. 比如:
如果路径不包含任何的空格, 那么你就可以忽略引号和'&'操作符.
PS C:> C:BelfryMyscript.ps1
如果脚本就在当前路径下, 你必须使用符号"."来告诉PowerShell该脚本就在当前路径下.
PS C:> .Myscript.ps1  

使用PowerShell管理多台服务器

若要解决此问题,请务必检查命令变量的属性以及它们包含的数据是你真正需要的。例如,使用$file是要获得类似Fullname提供的文件路径还是以某种形式将名称和路径进行组合呢?

PowerShell脚本的好处

二.Dot Sourcing
当使用上面的语法执行脚本的时候, 脚本中定义的变量和函数会在脚本运行结束后消失。如果你使用dot sourcing来运行脚本的时候, 所有脚本中定义的变量和函数会在脚本运行结束后依然存在。
举例运行dot-sourcing脚本.
PS C:> . "C:BelfryMy first Script.ps1"  
PS C:> . .Myscript.ps1"

         使用PowerShell管理多台服务器的核心就是一份简单的服务器清单,它包括您希望在其上执行常规任务和健康检查的服务器名字。

实际上,到最后你在命令中实际需要或查询的只是其中的一到两个属性。

对于已经习惯使用图形界面的服务器管理员而言,PowerShell脚本是一种全新的语言。

Powershell对象=属性 方法

         在我的例子中,我使用一个简单的包含我的服务器的清单AllServers.txt。格式如下:

Server 2012的发布,PowerShell作为脚本语言,将成为命令行接口的新规范。拥有超过2300条命令的PowerShell可以更容易的实现任务自动化...

你一个人可不容易搞定。

在现实世界中,你可能已经了解对象就是那些能够摸到的东西。Powershell中的对象和现实生活很相似。例如要在现实生活中描述一把小刀。我们可能会分两方面描述它
属性:一把小刀拥有一些特殊的属性,比如它的颜色、制造商、大小、刀片数。这个对象是红色的,重55克,有3个刀片,ABC公司生产的。因此属性描述了一个对象是什么。
方法:可以使用这个对象做什么,比如切东西、当螺丝钉用、开啤酒盖。一个对象能干什么就属于这个对象的方法。

         Server1

可以从一名经验丰富的管理员提供的脚本范例开始。

按Insert键设置命令行编辑模式为改写模式, 再按一次Insert键命令行返回插入模式. 当命令行处于改写模式, 你输入字符将会替代被光标高亮显示的字符. 当命令行处于插入模式(默认状态), 字符被插入到光标字符之前.
按Backspace键删除光标前一个字符(改写或插入模式). 改写模式中, 按Delete键删除高亮字符. 在插入模式, 按Delete键删除下一个字符.
按Tab键自动补全你输入的路径. 如果第一个现实的路径不是你期待的, 再一次按Tab知道正确的路径出现. 注意Tab键补全的路径只能是当前子目录中. 例如, 如果你输入了c: 然后按Tab键, 可选路径之一将会是c:windows, 而不是c:windowssystem32. 要进入结构中的下个层次(译者注: 文件系统中就是子目录), 在选择的父目录后输入反斜杠, 然后按Tab键. 例如, 如果你一直按Tab直到看见c:windows, 你可以在行尾输入一个反斜线, 然后继续按Tab键来遍历结构中的下一层.

         Server2

常用的管理脚本将有助于你在自己的管理工作中熟悉框架和语言。

今天为大家总结了在控制台的所有快捷键, 方便大家使用PowerShell. 实际上Cmd.exe或任何控制台都支持这些快捷键的.

         Server3

学习使用中的脚本范例。

按键

功能

光标向左移动一个字符

Ctrl ←

光标向左移动一个单词

光标向右移动一个字符

Ctrl →

光标向右移动一个单词

Home键

光标移动到行首

End键

光标移动到行尾

Delete键

删除光标指向的字符

Backspace键或Ctrl H

删除光标左边第一个字符

Ctrl End键

删除从光标到行尾的所有字符

Esc键

清除当前输入的所有字符

Insert键

插入与改写模式切换

Tab键

Tab键自动完成命令,例如:自动完成命令的名称、cmdlet命令的参数、路径。如果第一个提示的对象不是您期望的结果,继续输入Tab键,将会自动显示下一个候选对象。

向上查询历史命令

向下查询历史命令

F7键

显示命令历史记录,以图形列表窗的形式给出所有曾经输入的命令,并可用上下箭头键选择再次执行该命令。

F8键

搜索命令对应的历史记录,在命令上输入命令的一部分内容后,按F8键,可以得到匹配该输入的历史命令。如果有多个匹配项,重复按F8,可以循环显示所有曾经输入的命令。如果命令行为空,则默认匹配所有历史输入的命令。

F9键

按编号选择历史命令,以图形对话框方式要求您输入命令所对应的编号(从0开始),并将该命令显示在屏幕上。

Enter键或Ctrl M

回车(Enter)

Ctrl C

终止当前执行的命令

Ctrl Break

终止当前执行的命令

Alt F7键

清除所有曾经输入的命令历史记录

         ……

同时向您的同行学习PowerShell脚本,使自己熟悉这些通过PowerShell界面进行服务器管理的常用技巧。

Powershell把所有环境变量的记录保存在env: 虚拟驱动中,因此可以列出所有环境变量 。一旦查出环境变量的名字就可以使用$env:name 访问了。
PS C:Usersfltps> ls env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:ProgramData
APPDATA                        C:UsersfltAppDataRoaming
CommonProgramFiles             C:Program FilesCommon Files
CommonProgramFiles(x86)        C:Program Files (x86)Common Files
CommonProgramW6432             C:Program FilesCommon Files
COMPUTERNAME                   FLT-NB
ComSpec                        C:Windowssystem32cmd.exe

PS C:Usersfltps> $env:APPDATA
C:UsersfltAppDataRoaming
PS C:Usersfltps> dir a.ps|Format-List *


PSPath            : Microsoft.PowerShell.CoreFileSystem::C:Usersfltpsa.ps
PSParentPath      : Microsoft.PowerShell.CoreFileSystem::C:Usersfltps
PSChildName       : a.ps
PSDrive           : C
PSProvider        : Microsoft.PowerShell.CoreFileSystem
PSIsContainer     : False
VersionInfo       : File:             C:Usersfltpsa.ps
                    InternalName:
                    OriginalFilename:
                    FileVersion:
                    FileDescription:

PS C:Usersfltps> Get-Variable

Name                           Value
----                           -----
$                              *
?                              True
^                              Get-Variable
args                           {}
ConfirmPreference              High

PS C:Usersfltps> Get-Variable|fl *|more

Name        : $
Description :
Value       : more
Visibility  : Public
Module      :
ModuleName  :
Options     : None
Attributes  : {}

Value       : False
Name        : ?
Description : 上一命令的状态
Visibility  : Public
Module      :
ModuleName  :
Options     : ReadOnly, AllScope
Attributes  : {}

      我将演示的例子中,我使用一个Foreach循环对这个清单里列出的每台服务器执行一个任务。这个简单的服务器列表构成了完成重复任务的基石。我主要的工作是在Microsoft的环境里,我发现使用PowerShell执行重复任务要比之前用Python快。例如,Python需要多行语句读取,打开和关闭一个文件,但是PowerShell中Get-Content cmdlet读取一个文件只使用一行代码。

了解如何搜索所有可用的命令,针对你的任务需要优化每一个脚本条目。

 

# Read a file

get-content "C:AllServers.txt"

在你编写脚本的同时,思考如何简化维护和排错。

 

   如果你感觉要打过多的字,你可以通过它的别名来调用Get-Content cmdlet。

当你经历无数次尝试,终于创造出一个能完成工作任务的脚本,你一定会非常有成就感。

cmd控制台与ps控制台
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:Usersflt>powershell
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利。
PS C:Usersflt>

例如通过ls获取当前目录的所有文件信息,然后通过Sort -Descending对文件信息按照Name降序排列,最后将排序好的文件的Name和Mode格式化成Table输出。
PS C:Usersflt> ls | sort -Descending Name | Format-Table Name,Mode

Name                                                                            Mode
----                                                                            ----
Videos                                                                          d-r--
Searches                                                                        d-r--
Saved Games                                                                     d-r--
Roaming                                                                         d----
Desktop                                                                         d-r--
Contacts                                                                        d-r--
.vmrc_plugin_ovftool_settings.js                                                -a---

重定向
把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。
PS C:Usersfltps> "poweersheel" > a.txt
PS C:Usersfltps> cat .a.txt
poweersheel
PS C:Usersfltps> "poweersheel" >>a.txt
PS C:Usersfltps> cat a.txt
poweersheel
poweersheel

我们可以把powershell当成一个计算器。象键入命令行那样输入数学表达式,回车,powershell会自动计算并把结果输出。常用的加减乘除模( ,-,*,/,%)运算和小括号表达式都支持。
PS C:Usersflt> 1 2 3
6
PS C:Usersflt> 2/2
1
PS C:Usersflt> 6/3
2
PS C:Usersflt> 2*4
8
PS C:Usersflt> 3%2
1
PS C:Usersflt> 9%6
3
1gb/20mb*10kb
80kb*800*30/1gb
10GB/(80KB*5)/30

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:Usersflt>powershell
Windows PowerShell
版权所有 (C) 2013 Microsoft Corporation。保留所有权利。

先看看$psversiontable,这个变量拆开来看就是ps-version-table,表示PowerShell中各组件的版本号列表。其中表示PowerShell自己的版本号(PSVersion),也包括.NET的版本号(CLRVersion),还有Windows版本号(BuildVersion)
PS C:Usersflt> $psversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18408
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

接下来看看$host变量,里面一个Version,表示PowerShell的版本号。
PS C:Usersflt> $host

Name             : ConsoleHost
Version          : 4.0
InstanceId       : ec93e349-4833-4185-8f3d-8d365af04d70
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
PS C:Usersflt> Get-Host

Name             : ConsoleHost
Version          : 4.0
InstanceId       : ec93e349-4833-4185-8f3d-8d365af04d70
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

PS C:Usersflt> Get-Host|Select-Object Name

Name
----
ConsoleHost 
gc "C:AllServers.txt"

一旦你开始运用你的PowerShell和开发技能完成工作,记得查阅这些指导、诀窍和技巧。

图片 3

根据您的脚本能力水平,您可能已经知道如何解析XML,但你又会怎样对付VMware vSphere命令?

为了便于阅读而定义的最佳实践是在命令行中使用别名和在脚本中完成cmdlet。您可以使用Get-Alias cmdlet列出所有PowerShell中的别名:

或许你习惯于PowerShell的Web访问,但直到现在你都没实现PowerShell远程处理。

# List aliases, sort by name or definition

get-alias | sort name

get-alias | sort definition

从你的工作中找到你擅长的领域。

PowerShell即是交互式命令行也是脚本环境。我刚开始着手解决一个问题是通过在命令行中执行命令。当我已经确定了命令的正确顺序时,我把它们保存为一个以.ps1扩展名的脚本文件,当需要时再执行。

好,你现在已经是PowerShell专家了。

 

有时间的话,还可以用PowerShell编写小玩意来找点乐子。

自动化重复任务

展现你的专长

      PowerShell 使得为我所有的服务器实现自动化常规的和重复性任务变得更容易,使得用一些关于服务器的位信息(bit of information)便能快速和高效处理看似层出不穷的即席请求。接下来的章节只是描述一些我已经写好的,用来实现自动化重复性任务的脚本。这些例子的进步来自:我发现那些曾经花了很多精力解决才解决的问题,转换成Powershell来处理则变得非常简单。

直到最近,GUI图形界面管理工具仍是Exchange服务器管理员完成工作的唯一途径。

 SQL 任务

PowerShell命令行和脚本是Exchange管理的未来,而且在Exchange2013版有了重大改变,掌握管理员们必须努力学习这项新技术,才能最有效地使用新的Powershell接口。

      把Python转换成PowerShell最简单的任务就是对多台服务器执行一条语句。在这些例子中基本的步骤如下:

对于虚拟化用户群,PowerShell能实现虚拟机的配置、管理和其他任务的自动化。

  1. 为每台服务器读取数据库服务器清单
  2. 创建一个表用于存储结果
  3. 建立与服务器的连接
  4. 何以那么些SQL,PowerShell的三大习认为常难点及减轻格局。执行查询并格式化查询结果

好消息是,虚拟化社区有许多成熟的脚本和工作流分享,例如可实现以某种方式关闭Hyper-V内的来宾虚拟机,或者导出一个虚拟机等功能的脚本。

 

在你花费整个下午的时间为您的虚拟环境编写脚本之前,记得先搜索一下由精通PowerShell的虚拟化管理员们提供的共享资源。

     检查多台服务器上的SQLServer版本

对于存储团队来说,随着Windows Server 2012的到来,PowerShell从提高效率的外部工具变成了工作的基础环境。

          我运行如下脚本来确定,所有服务器是否处于公司规定的补丁级别:

先了解一些PowerShell的存储管理基本知识,这将成为完全从命令行界面管理Windows存储空间的起点。

# SQLVer.ps1

# usage: ./SQLVer.ps1  

# Check SQL version

foreach ($svr in get-content "C:dataAllServers.txt")

{

  $con = "server=$svr;database=master;Integrated Security=sspi"

  $cmd = "SELECT SERVERPROPERTY('ProductVersion') AS Version, SERVERPROPERTY('ProductLevel') as SP"

  $da = new-object System.Data.SqlClient.SqlDataAdapter ($cmd, $con)

  $dt = new-object System.Data.DataTable

  $da.fill($dt) | out-null

  $svr

  $dt | Format-Table -autosize

}        

例如,对于服务器存储系统管理,学习区分哪条命令行可以用来查看磁盘、或者查看物理磁盘、或者查看可用的物理磁盘,这会让管理员为数据中心创建存储资源池的工作更轻松。

 

【编辑推荐】

     下面的这个脚本遵循我用于对多台服务器执行SQL脚本的标准模板。它用foreach循环读取服务器清单,连接到服务器和执行一个返回用户数据库名称的SQL查询。为了这篇文章,我已经编辑过例子的格式,注释用绿色,PowerShell代码用蓝色,SQL用红色。

核对实际的数据库目录和内部数据库目录

每个月我都要核对实际的数据库目录和一个被其它应用程序作为资源引用的内部开发的数据库目录系统。

# inv.ps1

# usage: ./inv.ps1

# Database inventory

foreach ($svr in get-content "C:dataAllServers.txt")

{

  $con = "server=$svr;database=master;Integrated Security=sspi"

  $cmd = "SELECT name FROM master..sysdatabases WHERE dbid > 4 AND name NOT IN ('tracedb','UMRdb','Northwind','pubs','PerfAnalysis') ORDER BY name"

  $da = new-object System.Data.SqlClient.SqlDataAdapter ($cmd, $con)

  $dt = new-object System.Data.DataTable

  $da.fill($dt) | out-null

  $svr

  $dt | Format-Table -autosize

} 

这个查询按服务器排序,返回非微软(Non-Microsoft supplied,我猜想作者是指SqlServer 系统数据库)提供的数据库名称。之后,我会将之与一份数据库目录系统产生的报表进行对比。

 

从SysAdmin角色中移除BULTINAdministrator组

这个脚本定义了一个函数而不是foreach循环,允许我在任何服务器上从SysAdmin角色中移除BULTINAdministrator组。仅键入:

rmba ServerName

此函数接受一个参数,与服务器建立连接,然后执行sp_dropsrvrolememeber系统存储过程。

# Remove BUILTINAdministrators from sysadmin role

function rmba ($s)

{

   $svr="$s"

   $cn = new-object System.Data.SqlClient.SqlConnection"server=$svr;database=master;Integrated Security=sspi"

   $cn.Open()

   $sql = $cn.CreateCommand()

   $svr

   $sql.CommandText = "EXEC master..sp_dropsrvrolemember @loginame = N'BUILTINAdministrators', @rolename = N'sysadmin';"

   $rdr = $sql.ExecuteNonQuery();

}

这个脚本节省我的时间,因为我不必要跳转到SSMS去完成这个任务。在SMO章节中您会发现两个其它我创建的函数,它们用来列出BULTINAdministrator和服务器本地管理员的成员。


如蒙转载或引用,请保留以下内容:
Joe's Blog:

本文由澳门新萄京官方网站发布于服务器运维,转载请注明出处:何以那么些SQL,PowerShell的三大习认为常难点及减

关键词: