【TechTarget中国原创】 Windows PowerShell已成为微软在Windows Server上提供的首选管理界面。因为深度整合到Windows Server操作系统,PowerShell表面看上去可以不受任何限制做任何事情。然而,实际上能做得并没有那么多。 Windows Server最好用的功能之一就是可以运行脚本。PowerShell脚本允许代码重复使用,并支持运行复杂的命令序列,这是其他方式无法实现的。 PowerShell脚本的编写者必须关注的一个大问题就是授权。PowerShell是一个功能强大的脚本语言,但只有具备了适当的权限,PowerShell脚本才能正确运行。这一要求有时会带来问题,因为管理员通常被建议只使用标准、用户级权限的帐号登录进行日常操作。管理员帐号通常是保留不用的,只在运行明确需要提升PowerShell脚本权限的任务时才会启用。因此带来的问题就是在并不能保证运行脚本的人具有管理员权限的情况下,如何知道一段PowerShell脚本是否具有运行所需要的权限。 有两种方式能够处理这类PowerShell脚本权限的问题。大多数情况下,一个需要提升权限的PowerShell脚本运行时会执行脚本级的授权认证来获取所需的权限。 管理员编写脚本时采用何种方式授权,取决于该脚本运行时是否支持互动操作。如果一个脚本只是由管理员手动调用,则运行时管理员在场,可以要求管理员手动输入凭证,因此不会带来任何问题。这种方式在两种方式中更为安全,因为管理员授权凭证不会被存储。相反的,如果一个脚本是被自动进程调用的,此时并不能保证管理员在场并能够输入密码。这种情况下,脚本需要能够自动取得密码用于授权。 PowerShell互动授权方法 互动授权是两种方式中更为安全的一种,因为授权凭证不会被存储用作它用。调用互动授权使用Get-Credential命令。通常,Get-Credential的结果被映射为一个变量,因此所获得的凭证可以被映射配置到一条需要授权的命令上。 $c = Get-Credential Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c 在以上例子中,Get-Credential命令被映射为变量$c。运行这句脚本会使Windows弹出一个对话框,要求输入管理员凭证,如图1所示。 图1. 运行Get-Credential命令会弹出对话框,要求输入管理员凭证 注意代码的第二行,Get-WmiObject命令需要授权使用,该授权通过命令最后添加的–Credential转换完成,$c中记录了授权所需的凭证,即刚才输入的用户名和密码。 PowerShell自动授权方法 PowerShell自动授权工作机制与互动授权有所不同。执行自动授权时,需要事先存储凭证信息以便PowerShell在需要时能够获取得到。存储凭证的代码如下所示: Read-Host –AsSecureString | ConvertFrom-SecureString | Out-File C:\Scripts\Password.txt 输入以上命令后,用户输入密码——没有任何密码输入提示,用户仅仅需要输入密码并按下回车键。因为以安全字符串方式处理,输入的密码是掩码显示的,如图2所示。一旦输入完成,密码被写入到一个文本文件中,在该例中,即C:\Scripts\Password.txt,你也可以使用任何其他路径和文件名。密码在文件中以加密的格式存储,如图3所示。 图2. 此命令接受一个密码,然后将密码写入一个文本文件 图3. 文本文件以加密格式存储密码 这种情况下,脚本中通常会设置3个变量。第一个变量为包含在脚本代码中直接指定的用户名。第二个变量保存从文件中读取的密码。第三个变量存储将用户名和密码作为一个整体的凭证。代码如下所示: $Username = "poseydemo\Administrator" $Password = Get-Content c:\scripts\cred.txt | ConvertTo-SecureString $C = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password Get-WmiObject Win32_DiskDrive -ComputerName Server01 -Credential $c 如你所见,$Username存储用户名,$Password存储密码,$C存储凭证。 如果选择自动授权完成为PowerShell脚本权限配置,必须确保密码文件保存在一个安全的位置。否则其他PowerShell脚本可以简单地通过读取密码文件内容,获得管理员权限。

TechTarget中国原创内容,原文链接: http://www.searchsv.com.cn/showcontent_92944.htm
© TechTarget中国:http://www.techtarget.com.cn

PowerShell脚本授权最佳实践的更多相关文章

  1. 编写Shell脚本的最佳实践

    编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...

  2. Dotnet core使用JWT认证授权最佳实践(二)

    最近,团队的小伙伴们在做项目时,需要用到JWT认证.遂根据自己的经验,整理成了这篇文章,用来帮助理清JWT认证的原理和代码编写操作. 第一部分:Dotnet core使用JWT认证授权最佳实践(一) ...

  3. 编写Shell脚本的最佳实践,规范二

    需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : ...

  4. 编写 Shell 脚本的最佳实践

    转自:http://kb.cnblogs.com/page/574767/ 前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看 ...

  5. 编写Shell脚本的最佳实践,规范一

    随着写的SHELL程序越来越多,发现自己每次写都有不同的习惯或者定义了不同的东西,变量名定义得不一样,整个程序缩进不统一,没有注释等问题,等我回过头看这些程序的时候发现很麻烦.所以写了个shell代码 ...

  6. Dotnet core使用JWT认证授权最佳实践(一)

    最近,团队的小伙伴们在做项目时,需要用到JWT认证.遂根据自己的经验,整理成了这篇文章,用来帮助理清JWT认证的原理和代码编写操作. 一.JWT JSON Web Token (JWT)是一个开放标准 ...

  7. Shell 脚本编程最佳实践

    前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东 ...

  8. MySQL安装脚本最佳实践

    MySQL安装脚本最佳实践 2018年9月19日 17:01 #!/bin/bash   export host_ip=192.168.7.206   echo '#1.取master主机ip的后三位 ...

  9. Shell脚本最佳实践

    Shell脚本最佳实践 0. 编码.缩进.文件命名和权限设置等 使用utf-8编码: 统一使用tab缩进或空格缩进,不要混用: 文件名以.sh结尾,并且统一风格: 添加可执行权限: chmod +x ...

随机推荐

  1. Python基础学习之集合

    集合是一个无序.不重复的数据集合,它的主要作用如下: 去重:把一个列表变成集合,就可以去除重复的内容 关系测试:测试两组数据之间的交集.并集.差集等关系 集合常用的操作: #创建一个数值集合 s=se ...

  2. 电路设计软件 电路模拟软件 sPlan , LTspice 等

    电路设计/PCB绘制 立创EDA https://lceda.cn/ sPlan http://www.electronic-software-shop.com/splan-70.html?langu ...

  3. Sublime插件支持Sass编译和Babel解析ES6 & .sublime-build文件初探(转载自imwtr)

    原文请看:http://www.cnblogs.com/imwtr/p/6010550.html   用Sublime Text蛮久了,配置配来配去的,每次换电脑都得重头再配过,奈何人老了脑子不中用了 ...

  4. css样式设置高度不定文本垂直居中

    使用css实现文本垂直居中,对于支持display: table的浏览器来说,是比较容易实现的,只需要对外层div设置为table,内层div设置为table-cell,并设置文本垂直居中即可.但对于 ...

  5. Android(java)学习笔记66:Android Studio中build.gradle简介

    1.首先我们直接上代码介绍: // Top-level build file where you can add configuration options common to all sub-pro ...

  6. PHP APC安装与使用

    先要解决一下httpd-devel依赖库问题 yum install cyrus-sasl-devel db4-devel openldap apr apr-util apr-util-devel p ...

  7. mysql 全连接 报错1051的原因

    由于mysql 不支持 直接写full outer join 或者 full join来表示全外连接但是可以用left right union right 代替 下面是例子: select * fro ...

  8. 手动安装Apache+PHP+MYSQL及环境配置

    先准备好软件: Apache官方下载地址:apache_2.0.55-win32-x86-no_ssl.msi,更多版本在这里: php官方下载地址:php-5.0.5-Win32.zip,更多镜像下 ...

  9. Java常见加密技术的密钥与加密串长度

    Java常见的Java方式 1.Base64编码 2.十六进制(Hex)编码 3.MD消息摘要 4.DES加密 5.3DES加密 6.AES加密 6.RSA加密

  10. 推荐优秀的开源GIS软件

    推荐优秀的开源GIS软件(以后会补充) 从GIS入门到现在,我已经接触不少优秀的GIS软件,这里列出我使用过优秀的开源GIS软件. 桌面GIS软件: Qgis(基于Qt使用C++开发的跨平台桌面软件, ...