PowerShell?您用过吗?您能给我展示一些我可以使用它做的很酷的系统管理工作吗?

PowerShell?您用过吗?您能给我展示一些我可以使用它做的很酷的系统管理工作吗?

我一直在到处读到电源外壳是未来的趋势。它刚发布时,我做了一大堆虚拟实验室,但从那时起,我还没有在生产环境中使用过它。我知道有一天我会处理已经安装它的操作系统,所以我想做好准备。

我想知道:

  1. 你用它嗎?
  2. 您使用 PowerShell 的“引导”过程是怎样的?
  3. 您用它编写了哪些类型的系统管理任务?
  4. 我是 SQL Server 数据库管理员。可以用它做什么有趣的事情?

似乎每个人都同意微软正在大力推广这一点,但实际上还没有人使用它。我想听听使用它来完成日常任务的系统管理员的意见并分享一些代码示例。

答案1

微软正在尽其所能使 PowerShell 成为各地高级用户和自动化编写人员的选择。在 .NET 中编译代码以完成相同操作的日子已经一去不复返了,现在您只需要 notepad.exe 和 google。我们在办公室中非常喜欢它,尤其是因为 Exchange 2007 的管理控制台并不包含您可以在 PowerShell 中执行的所有操作。微软故意没有实现那些只在很长一段时间内完成的事情,这样更容易开发,如果您有任何类似于复杂环境的东西,这完全迫使您使用它。

管理微软新一代产品(Win7、Windows Server 2008、Exchange 2007/2010、SQL Server 2008)都具有非常丰富的 PowerShell 挂钩。一旦远程 Powershell(PowerShell 2.0 IIRC)与 Server 2008 R2 一起部署,它将对自动化编写者变得更加有用。

我们对其做了什么:

  • 创建一个网页,将某些管理任务委托给帮助台用户。该网页会触发在 PowerShell 中执行的命令。它的作用如下:
    • 创建和删除用户帐户,包括配置 Exchange 2007 邮箱和主目录
    • 解锁被锁定的账户
    • 创建/删除群组
    • 从组中添加/删除用户
    • 在邮件存储之间移动用户
    • 设置密码
  • 每晚从 ERP 系统中提取数据并将全局地址簿数据推送到 Active Directory 中。
  • 解决从 Exchange 2003 到 Exchange 2007 的迁移过程中出现的 LegacyExchangeDN 问题。必须为所有曾经使用 Exchange 2003 的用户添加 X500 地址。一个相当短的 PowerShell 脚本解决了这个问题。
  • 脚本化创建“群组邮箱”(Exchange 中的共享邮箱,多个用户可以访问该邮箱),由于我们在启动之前需要的数据的性质,这是一个手动过程。它极大地标准化了这些邮箱的设置。
  • 创建了一个脚本,遍历所有域内机器,重置特定注册表项并重新启动服务。花了 18 个小时才完成,但完成了任务。

是的,PowerShell 将会伴随我们很长一段时间。

编辑:根据请求,添加代码示例

$list=导入-csv(“groupusers.csv”)
$lastseengroup=$list[0].group
$ADGroupPrefix="grp.netware"。
$ADGroupSuffix="{redacted -- 格式为 ,ou=groups,dc=domain,dc=domain,dc=domain}"
清除变量成员列表
清除变量未知用户
foreach ($list 中的条目) {
    如果 ($($entry.group) -ne $lastseengroup) {
        echo“偶然发现新组$($entry.group),正在将更改提交给$lastseengroup”
        $新组=$ADgroupPrefix+$最后组
        $newgroupdn='"'+"cn=$newgroup$ADGroupSuffix"+'"'
        echo“获取 $newgroup 的 DN”
        $existinggroup=dsquery 组 domainroot -名称 $newgroup
        如果(($existinggroup -ne $null)){
            dsmod 组 $newgroupdn -chmbr $memberlist
        } 别的 {
            dsadd group $newgroupdn -scope u -secgrp yes -members $memberlist -desc "从 eDirectory 导入的组"
        }
        清除变量成员列表
    }
    $User=get-user $($entry.member) -ErrorAction SilentlyContinue
    如果 ($User.isvalid) {
        $UserDN=$User.distinguishedname
        $memberlist=$memberlist+'"'+"$UserDN"+'" '
    } 别的 {
        $未知用户=$未知用户+$($entry.member)
    }
    $lastseengroup=$($entry.group)

}
dsadd 组“cn=$ADGroupPrefix$lastseengroup$ADGroupSuffix”-scope u-secgrp yes-members $memberlist

这将获取使用 perl 脚本创建的 CSV 文件并更新一组组。如果组已存在,它将用文件中指定的成员身份替换成员身份。如果组不存在,它将创建它。这是单向同步。此外,不相当已投入生产,但已接近尾声。

答案2

鉴于微软的服务器产品从一开始就将支持 PowerShell(我相信下一个版本的 Exchange 已经全部配置可通过 PowerShell 进行),并且像PowerShell 实践描述一些自动化单调任务的好方法,我认为有理由认为 PowerShell 将在一段时间内成为 Windows 服务器领域的流行技术。

答案3

我建议Scott Hanselman 的播客#162。似乎所有 Microsoft 服务器团队都被“强制”提供 PowerShell cmdlet,并且遵循单一、一致的语法。

此外,第三方如虚拟机正在采用它

简而言之,我相信从 2.0 开始的 PowerShell 可以真正替代批处理文件,以完成除最琐碎的任务之外的所有任务。

答案4

您用它编写了哪些类型的管理任务?

应用程序/服务监控:从(远程)事件日志和存储过程中获取关键性能数字,并从单个批处理文件中显示它们

我是 SQL Server DBA,能向我展示一些可以用它做的有趣的事情吗?

自动SQL备份:每日轮换 MSSQL 备份(每日=增量,每周+每月=完整;保留 5 个每日备份、5 个每周备份)、压缩、电子邮件通知

相关内容