【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. C# 驱动的mongodb的分页查询简单示例

    /// <summary> /// mongodb分页查询 /// </summary> /// <typeparam name="T">< ...

  2. 使用Axure管理团队项目图文教程 团队协作操作步骤

    Axure RP团队版和企业版都支持团队协作,可以创建和管理团队项目,即多人共同创作一个原型.本文通过图文教程的形式,讲解了如何基于Axure Share服务创建和管理团队项目.因为Axure Sha ...

  3. 使用taobao cnpm 源解决npm无法安装module问题

    npm 安装nativescript时出现异常,一直停着不动.应该是源被墙了的问题可以使用淘宝仓库,执行下面的命令: alias cnpm="npm --registry=https://r ...

  4. 中期ppt制作

    陀螺仪的使用解释:https://zhuanlan.zhihu.com/p/29244429 手机坐标轴的图片:http://jcjs.siat.ac.cn/ch/reader/create_pdf. ...

  5. js中this的运用

    this 永远指向函数运行时所在的对象,而不是函数创建时所在的对象 匿名函数和不处于任何对象中的函数,This指向window call, apply, with指的This是谁就是谁. 普通函数调用 ...

  6. 4.vue引入axios同源跨域

    前言: 跨域方案有很多种,既然我们用到了Vue,那么就使用vue提供的跨域方案. 解决方案: 1.修改HttpRequestUtil.js import axios from 'axios' expo ...

  7. Linux 安装Oracle11g完整安装图文教程另附基本操作 (分享)

    一.修改操作系统核心参数 在Root用户下执行以下步骤: 1)修改用户的SHELL的限制,修改/etc/security/limits.conf文件 输入命令:vi /etc/security/lim ...

  8. jquery ajax参数

    //默认请求参数 var _options = { url: null, // 请求连接地址 type: 'GET', // 请求类型(get,post) data: null, // post时请求 ...

  9. easyui基于 layui.laydate日期扩展组件

    本人后端开发码农一个,公司前端忙的一逼,项目使用的是easyui组件,其自带的datebox组件使用起来非常不爽,主要表现在 1.自定义显示格式很麻烦 2.选择年份和月份用户体验也不好 网上有关于和M ...

  10. 堆(heap)和栈(stack)几点认识

    堆(heap)和栈(stack)主要的区别由以下几点:1.管理方式不同:2.空间大小不同:3.产生碎片不同:4.生长方向不同:5.分配归属不同:6.分配效率不同:7.存取效率不同:管理方式:对于栈来讲 ...