电源外壳?你使用它吗?你能告诉我一些我可以用它做的很酷的系统管理事情吗?

Nic*_*ias 45 windows powershell windows-server-2003 windows-server-2008 sql-server

我到处都在阅读PowerShell是未来的方式。当它第一次发布时,我做了一大堆虚拟实验室,但从那以后我还没有在生产环境中使用它。我知道有一天我会处理已经安装了操作系统的操作系统,所以我想做好准备。

我想知道:

  1. 你使用它吗?
  2. 您使用 PowerShell 的“引导”过程是什么?
  3. 你用它编写了什么样的系统管理任务?
  4. 我是 SQL Server 数据库管理员。有什么很酷的事情与它有关?

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

sys*_*138 34

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

管理 Microsoft 的新一代产品(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=import-csv("groupusers.csv")
$lastseengroup=$list[0].group
$ADGroupPrefix="grp.netware."
$ADGroupSuffix="{redacted -- 格式为,ou=groups,dc=domain,dc=domain,dc=domain}"
清除变量成员列表
清除变量未知用户
foreach($list 中的 $entry){
    如果 ($($entry.group) -ne $lastseengroup) {
        echo "偶然发现了新组 $($entry.group),正在向 $lastseengroup 提交更改"
        $newgroup=$ADgroupPrefix+$lastseengroup
        $newgroupdn='"'+"cn=$newgroup$ADGroupSuffix"+'"'
        echo "正在为 $newgroup 获取 DN"
        $existinggroup=dsquery group domainroot -name $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"+'" '
    } 别的 {
        $unknownusers=$unknownusers+$($entry.member)
    }
    $lastseengroup=$($entry.group)

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

这需要使用 perl 脚本创建的 CSV 文件并更新一组组。如果该组已存在,则将其成员替换为文件中指定的成员。如果该组不存在,则创建它。这是一种单向同步。此外,还没有完全投入生产,但已经接近了。

  • 远程powershell!!你的意思是像ssh!?!是时候了! (6认同)
  • 您如何从网站运行 powershell 脚本,您是否使用 powershell 脚本作为 Web 编程语言?你在用powershellASP吗?您是否以 IIS 用户身份运行脚本? (2认同)

moo*_*baa 17

鉴于 Microsoft 的服务器产品将从一开始就支持 PowerShell(我相信 Exchange 的下一个版本将通过 PowerShell 提供所有配置),并且像PowerShell in Practice这样的书籍描述了一些自动化其他单调任务的好方法,我认为有理由认为 PowerShell 将在一段时间内成为 Windows Serverland 中的流行技术。

  • 自 Exchange 2007 以来,Exchange 一直是 PowerShell。OCS 将在其下一个版本中完全支持 PowerShell;大多数 System Center 产品要么完全支持,要么将在下一个版本中支持它。PowerShell 不会去任何地方。 (4认同)

Mic*_*tum 12

我推荐Scott Hanselman 的 Podcast #162。似乎所有 Microsoft 服务器团队都“被迫”提供 PowerShell cmdlet,并遵循单一、一致的语法。

此外,像VMWare这样的第三方正在采用它

简而言之,我相信从 2.0 开始的 PowerShell 正在认真地为除最琐碎的任务之外的所有任务替换批处理文件。


Cha*_*ler 10

我作为 SQL Server 数据库管理员使用的十个 PowerShell 脚本(在我的博客上都有描述/发布):

  1. 检查所有 SQL Server 上的磁盘空间并将数据加载到 SQL 表
  2. 在所有生产 SQL Server 上运行权限报告并将数据加载到 SQL 数据库
  3. 发现网络上的所有Windows Server 2003群集、节点和虚拟,并加载到 SQL 表
  4. 发现SCCM 中定义的所有 SQL Server 上的所有数据库并加载到 SQL 表
  5. 通过将所有 SQL Server 的备份信息加载到 SQL 表中来创建 SQL Server 备份记分卡
  6. 验证 TCP 卸载引擎在 Windows Server 2003 SP2 中被禁用(这是许多 SQL Server 的性能杀手)
  7. 验证磁盘分区对齐(如果磁盘未正确对齐也是性能杀手)
  8. 将 SQL 表从一台服务器复制到另一台服务器
  9. Recursivley使用 MSDB 存储将所有SSIS包从一台服务器复制到另一台服务器,包括文件夹结构
  10. 创建我自己的图形对象依赖项查看器


小智 8

你用它编写了什么样的管理任务?

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

我是一名 SQL Server DBA,能告诉我一些很酷的事情吗?

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


小智 7

在之前的职业生涯中使用过 unix shell 脚本,然后转向 windows 服务器管理,我可以说我真的非常非常欣赏 powershell——我没有时间也没有能力学习太多神秘的语法,并且惊喜地发现很多很多 powershell 脚本都可以用非常简单的语言编写……就像我习惯使用 ksh 一样,这就是它的价值!

我预测它会存在很长时间。


Lex*_*Lex 7

我认为这很酷:使用 SQL Server 2008,您可以获得新的 PowerShell 扩展,允许您像本地文件系统或注册表一样导航 SQL 数据库。

安装 SQL Server 客户端工具后,您可以在 PowerShell 中打开任何数据库(通过右键单击上下文菜单)并以面向对象的方式使用它:

PS SQLSERVER:\SQL\MyServer\MyInstance\Databases\ExampleDB\>function prompt {"PS >"}
PS >cd tables
PS >dir

SCHEMA          NAME         CREATED
------          ----         -------
dbo             MyTable      25/06/2009 17:02

PS > dir | format-table name, columns, rowcount, parent

NAME            COLUMNS      ROWCOUNT      PARENT
----            -------      --------      ------
MyTable         {Id, Name}   0             {ExampleDB}

PS >$myTable = dir | where {$_.Name -eq "MyTable"}
PS >$myTable.Script()

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[MyTable](
[Id] [int] IDENTITY(1,1) NOT NULL
[Name] [nText] NOT NULL
) ON [PRIMARY]

PS >set-location \SQL\AnotherServer\Default
PS >cd databases\Northwind\tables
PS >$myTables = dir | where {$_.Rowcount -gt 100 -and $_.HasIndex -eq 1}
PS >$myTables.Count

8

PS >foreach ($table in $tables) {$table.RebuildIndexes(90)}
Run Code Online (Sandbox Code Playgroud)

请注意,第一行只是更改了提示,使其不那么长。

希望除此之外,这里发生的事情是不言而喻的:)


小智 5

SQL Server 2008 现在在 Management Studio 中具有 PowerShell 上下文选项,因此不仅仅是 Exchange 接受它。此外,将其视为 DOS 的替代品,因为这几乎是 MS 的想法,因为他们无法提高 DOS 的向后兼容性问题的安全性,所以他们只是创造了一些新的东西,问题解决了!