最近,我加入了我的企业中的Windows团队和我的开发人员背景(Java,.NET和Web),我很快就对PowerShell感兴趣.我可以看到它对普通旧批处理文件VB的价值......这就是为什么我想推广它的用法,并且一点一点地推动人们支持它,除非有理由不这样做.
部署PowerShell似乎非常简单,因为我们可以轻松批准WSUS中的相关补丁,并通过GPO为AD集成服务器配置执行策略.
我的问题实际上更多是关于PowerShell和PowerShell模块的分发和使用(例如,PCSX,PowerShellPack,自制,......).
对于已经在企业中部署PowerShell的人:
您是否为PowerShell提供了某种标准软件包,并在每台服务器上部署了一组模块?如果这样做,那么如何部署已安装模块的新版本?
您是否已将中央PowerShell存储库放在存储所有PowerShell模块的位置?如果是这样,该存储库是全局可访问的,还是您同步的辅助存储库?
我已经习惯了Maven,Ivy和其他依赖管理软件这样的工具,这就是为什么我对PowerShell在这方面提供的东西感到有点失望.
我找到了一篇关于这个主题的非常好的文章,可能会走同一条道路,因为它符合我的要求.
你使用WinRM吗?您是直接从工作站连接还是有中央管理服务器?您是否限制对这些管理服务器的WinRM访问?
您是否在非托管环境(不在AD域中的服务器)中使用WinRM?你如何配置WinRM?
我们有一个网络区域,其中服务器不属于AD域,因此我不能依赖WinRM的Kerberos身份验证.
在全球范围内,您的经验是什么,您对结果满意吗?
编辑: 关于问题2,我们决定建立一个中央存储库.
我们的想法是拥有一个将受版本控制(GIT)的主存储库,并且我们将成为唯一具有写访问权限的存储库.
从该存储库,我们将使用类似rsync的工具(在我们的情况下,将是robocopy)将模块复制到其他辅助存储库(这将是只读副本).客户端只能访问这些存储库(我们只需更新这些客户端上的PSModulePath以确保它们可以访问存储库).
我们还将发布我们的版本,因此在存储库中,将提供多个版本:开发,集成和生产.
我最近从2003年到2008年升级了许多服务器.自升级以来,我开始看到以下错误:
[servername]连接到远程服务器失败,并显示以下错误消息:WSMan服务无法启动主机进程来处理给定的请求.确保正确注册了WSMan提供程序主机服务器和代理.有关详细信息,请参阅about_Remote_Troubleshooting帮助主题.
错误似乎是随机的.该脚本将工作,然后失败.创建会话的命令处于循环中(创建会话,删除会话),并且作为一组部署脚本的一部分被多次调用.当脚本失败时,它会在不同的点失败.
我检查了本地工作站(win7)目标服务器(win2008R2)上的事件日志,但没有我能看到的错误.
这是随机失败的行:
$ session = New-PSSession -ComputerName $ serverName -Credential $ credential
我在Win2003上没有看到这个问题.脚本没有改变.我假设问题出在目标服务器上,但无法找到任何错误或日志来查看.它将工作一次然后失败,因此我的部署脚本有时会成功,然后在不同的点失败.
任何关于追踪这个问题的指导都将非常感激.
powershell powershell-2.0 windows-server-2008 powershell-remoting
我无法使用连接到远程服务器enter-pssession -computername serverA.我的情景:
winrm quickconfig)我正在尝试enter-pssession -computername serverA从serverB到serverA的域管理员凭据,它会抛出以下错误:
""Enter-PSSession:连接到远程服务器失败,并显示以下错误消息:WinRM无法处理请求.使用Kerberos身份验证时出现以下错误:找不到网络路径.""
当我尝试enter-pssession -computername serverB从serverA的域管理员凭据下它工作正常!它也适用于我使用localhost所以:enter-pssession -computername localhost在域管理员凭据(在serverA上)也可以工作,但是当我在serverA(而不是localhost)上尝试主机名时,enter-pssession -computername serverA它会抛出相同的错误.
我也尝试使用get-credential并提供不同类型的凭据,但它没有帮助.唯一有帮助的是使用本地(非域)管理员帐户并运行enter-pssession -computername serverA -credentials $cred并且工作,但只在本地,我能够从本地机器(从serverA到自身)执行此操作,但不能从serverB到serverA下的serverA执行此操作管理员凭据.
有任何想法吗?
谢谢
为了让我更加明显,当我远程连接到实时/生产服务器时,我认为在使用远程PowerShell会话时能够为我连接的机器名称着色是很方便的.
但是,我看不到这样做的方法......服务器名称前缀似乎独立于提示功能,即使我可以使用它,我也不确定如何定义新的提示会议的持续时间.
有没有办法定制这个?注意:我不想为所有服务器名称着色相同,我想区分本地/生产服务器.
我想执行特定于远程PSSession的代码.也就是说,代码不适用于本地,但适用于所有远程会话.
是否存在任何环境变量,函数或cmdlet,如果我处于活动的PSSession中,则会有效地返回true;如果我在本地运行,则会返回false?
我使用winrm over SSL在Windows Azure上创建了一个Windows VM.
但是,我无法使用PowerShell脚本连接它.
当我运行以下内容时:
?Enter-PSSession -ConnectionUri https://myniceapp.cloudapp.net:5986
-Credential "hostname/username"
-SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)
Run Code Online (Sandbox Code Playgroud)
我正在收到提示输入密码的提示,输入后我设法连接.
但是,当我尝试自动化它时,它总是返回"访问被拒绝"
$securePassword = ConvertTo-SecureString -AsPlainText -Force "password"
$cred = New-Object System.Management.Automation.PSCredential "hostname/username", $securePassword
?Enter-PSSession -ConnectionUri https://myniceapp.cloudapp.net:5986 -Credential $mycreds -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑
完整错误如下所示:
Enter-PSSession:连接到远程服务器myniceaspp.cloudapp.net失败,并显示以下错误消息:访问被拒绝.有关详细信息,请参阅about_Remote_Troubleshooting帮助主题.
在行:1 char:1
+ Enter-PSSession -ConnectionUri https://myniceaspp.cloudapp ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~
+ CategoryInfo:InvalidArgument:(https:// myniceaspp ... udapp.net:5986/:Uri)[Enter-PSSession],PSRemotingTransportException
+ FullyQualifiedErrorId:CreateRemoteRunspaceFailed
我正在尝试建立PowerShell会话以对localhost上的Exchange服务器运行多个Exchange命令.我一直收到以下错误:
New-PSSession : [<HOSTNAME>] Connecting to remote server <HOSTNAME> failed with the following error message
: Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:12
+ $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'h ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotin
gTransportException
+ FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed
Run Code Online (Sandbox Code Playgroud)
我的代码是Microsoft Technet文章的副本粘贴.它适用于远程机器,但无论何时我瞄准我运行的机器,我都会收到上述错误.
到目前为止我尝试过的:
about_remote_troubleshooting帮助主题.与Access Denied错误相关的任何内容均无效.net use并net session确保我没有具有相同凭据问题的奇怪的多个连接.(我没有看到任何迹象表明)一些快速说明:
powershell access-denied powershell-remoting windows-server-2012 exchange-server-2013
我正在尝试检索位于远程服务器中的文件的Filehash Invoke-Command.我在powershell版本4上运行我的脚本.当我给出完整路径如下时,它工作正常:
Invoke-Command -ComputerName winserver -ScriptBlock {
Get-FileHash -Path E:\test\testfile.zip -Algorithm SHA1
}
Run Code Online (Sandbox Code Playgroud)
以上命令有效.但是我需要通过变量传递文件名,如下所示:
Invoke-Command -ComputerName winserver -ScriptBlock {
Get-FileHash -Path "E:\test\$dest.zip" -Algorithm SHA1
}
Run Code Online (Sandbox Code Playgroud)
我是脚本和PowerShell的新手.请帮我解决这个问题!
我尝试使用以下代码从C#运行脚本localwindows.ps1:
PSCredential credential = new PSCredential(userName, securePassword);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "machineName", 5985, "/wsman", shellUri, credential);
using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
runspace.Open();
String file = "C:\\localwindows.ps1";
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(file);
pipeline.Commands.Add("Out-String");
Collection<PSObject> results = pipeline.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
但是获得异常:'术语'C:\ localwindows.ps1'不被识别为cmdlet,函数,脚本文件或可操作程序的名称.
所以我尝试了以下方法:
PSCredential credential = new PSCredential(userName, securePassword);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "machineName", 5985, "/wsman", shellUri, credential);
using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
runspace.Open();
using (PowerShell powershell = PowerShell.Create())
{
powershell.Runspace = runspace;
PSCommand new1 = new PSCommand();
String …Run Code Online (Sandbox Code Playgroud) 我已经实现了一个脚本,我试图将服务器A上的一些文件复制到服务器B.让我向您解释一下这个过程.
我启动了一个循环,它将运行两次,在第一次执行时,我停止应用程序池并启动应用程序池,而不是创建备份,而不是尝试复制文件但是它给了我一个错误,访问被拒绝但是我编辑该文件夹的所有权限,但通过脚本,它不允许我从服务器A复制和替换服务器2上的文件.
# Embedding the password in the script.
"Setting Variables"
$MyDomain = "ranbi" ;
$MyClearTextUsername = "shian" ;
$MyClearTextPassword = "sham@01" ;
$MyUsernameDomain = $MyDomain + '\' + $MyClearTextUsername;
$SecurePassword = ConvertTo-SecureString -String $MyClearTextPassword -AsPlainText -Force ;
$MyCreds = New-Object System.Management.Automation.PSCredential $MyUsernameDomain,$SecurePassword ;
#System Variable for backup Procedure
$date = Get-Date -Format d-MMMM-yyyy-h-m-s #Variable is used to get the date and time
for ($i=1; $i -le 2; $i++) {
$servername = "server" + $i
$backupsrc = "\\$servername\C$\Program Files (x86)\service\healthService\v1_0" …Run Code Online (Sandbox Code Playgroud) powershell powershell-2.0 powershell-remoting powershell-3.0 powershell-4.0