PowerShell脚本授权最佳实践
【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脚本授权最佳实践的更多相关文章
- 编写Shell脚本的最佳实践
编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...
- Dotnet core使用JWT认证授权最佳实践(二)
最近,团队的小伙伴们在做项目时,需要用到JWT认证.遂根据自己的经验,整理成了这篇文章,用来帮助理清JWT认证的原理和代码编写操作. 第一部分:Dotnet core使用JWT认证授权最佳实践(一) ...
- 编写Shell脚本的最佳实践,规范二
需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : ...
- 编写 Shell 脚本的最佳实践
转自:http://kb.cnblogs.com/page/574767/ 前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看 ...
- 编写Shell脚本的最佳实践,规范一
随着写的SHELL程序越来越多,发现自己每次写都有不同的习惯或者定义了不同的东西,变量名定义得不一样,整个程序缩进不统一,没有注释等问题,等我回过头看这些程序的时候发现很麻烦.所以写了个shell代码 ...
- Dotnet core使用JWT认证授权最佳实践(一)
最近,团队的小伙伴们在做项目时,需要用到JWT认证.遂根据自己的经验,整理成了这篇文章,用来帮助理清JWT认证的原理和代码编写操作. 一.JWT JSON Web Token (JWT)是一个开放标准 ...
- Shell 脚本编程最佳实践
前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东 ...
- MySQL安装脚本最佳实践
MySQL安装脚本最佳实践 2018年9月19日 17:01 #!/bin/bash export host_ip=192.168.7.206 echo '#1.取master主机ip的后三位 ...
- Shell脚本最佳实践
Shell脚本最佳实践 0. 编码.缩进.文件命名和权限设置等 使用utf-8编码: 统一使用tab缩进或空格缩进,不要混用: 文件名以.sh结尾,并且统一风格: 添加可执行权限: chmod +x ...
随机推荐
- 动软代码生成器,主子表增加的时候子表的parentID无法插入问题解决方案
StringBuilder strSql=new StringBuilder(); strSql.Append("insert into HT_XunJiaMain("); str ...
- 分布式爬虫-Kafka监控
分布式爬虫-Kafka监控 1.介绍
- nginx配置vhost配置文件详解
//千锋PHP-PHP培训的实力派server { listen 80; server_name www.sina.com; root /data/www/sina; index index.php; ...
- April 8 2017 Week 14 Saturday
Life is the art of drawing without an eraser. 人生如画,落笔无悔. Yesterday I watched a film from Japan, Afte ...
- 2016 Multi-University Training Contest 2 - 1005 (hdu5738)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5738 题目大意:给定平面上的n个点,一个集合合法当且仅当集合中存在一对点u,v,对于集合中任意点w,均 ...
- C++学习之显式类型转换与运行时类型识别RTTI
static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情 ...
- 【[SDOI2017]新生舞会】
题目 好题啊 我们要求的是 \[C=\frac{\sum_{i=1}^na_i}{\sum_{i=1}^nb_i}\] 使得\(C\)最大 显然 \[C\times \sum_{i=1}^nb_i=\ ...
- PHP 5.4 on CentOS/RHEL 7.0, 6.5 and 5.10 via Yum
PHP 5.4.36 has been released on PHP.net on 18th December 2014, and is also available for CentOS/RHEL ...
- 问题 B: 投简历
题目描述 小华历经12寒窗苦读,又经历4年大学磨砺,终于毕业了,随着毕业季的到来,找工作也日益紧张起来.由于要面试不同的公司,因此小华需要准备不同的简历.当然最基本的信息是必不可少的,基本信息:姓名. ...
- 用蒙特卡洛方法计算派-python和R语言
用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据 ...