Operations Lab.

Archive for 6月 2018

PSScriptAnalyzer の Fix スイッチを使ってみる

leave a comment »

PSScriptAnalyzer 1.17.1 がリリースされました。

ルールが追加(修正・ブラッシュアップ)されたり、エンジンが改善されていますが、一番大きな変更点は Fix スイッチ(オプション)が実装されたことです。

-Fix [<SwitchParameter>]
    Fixes certain warnings which contain a fix in their DiagnosticRecord.

    When you used Fix, Invoke-ScriptAnalyzer runs as usual but will apply the fixes before running the analysis. Please make sure that you have a backup of your files when using this switch. It tries to preserve the file encoding but there are still some cases where the encoding can change.

    Required?                    false
    Position?                    named
    Default value                False
    Accept pipeline input?       False
    Accept wildcard characters?  false

Fix スイッチが指定された場合、問題となっている箇所を自動で修正します。(修正できる範囲において。)

PS D:\Users\user01\Documents\WindowsPowerShell> Get-Content .\Sample.ps1
gci | % {
    $_.BaseName
}

$user = "Administrator"
$pass = ConvertTo-SecureString 'Password1' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($user, $pass)
Enter-PSSession -Credential $cred -ComputerName hoge
PS D:\Users\user01\Documents\WindowsPowerShell> Invoke-ScriptAnalyzer -Path .\Sample.ps1 -ReportSummary

RuleName                            Severity     ScriptName Line  Message
--------                            --------     ---------- ----  -------
PSAvoidUsingComputerNameHardcoded   Error        Sample.ps1 8     The ComputerName parameter of cmdlet 'Enter-PSSession
                                                                  ' is hardcoded. This will expose sensitive informatio
                                                                  n about the system if the script is shared.
PSAvoidUsingConvertToSecureStringWi Error        Sample.ps1 6     File 'Sample.ps1' uses ConvertTo-SecureString with pl
thPlainText                                                       aintext. This will expose secure information. Encrypt
                                                                  ed standard strings should be used instead.
PSAvoidUsingCmdletAliases           Warning      Sample.ps1 1     'gci' is an alias of 'Get-ChildItem'. Alias can intro
                                                                  duce possible problems and make scripts hard to maint
                                                                  ain. Please consider changing alias to its full conte
                                                                  nt.
PSAvoidUsingCmdletAliases           Warning      Sample.ps1 1     '%' is an alias of 'ForEach-Object'. Alias can introd
                                                                  uce possible problems and make scripts hard to mainta
                                                                  in. Please consider changing alias to its full conten
                                                                  t.
4 rule violations found.    Severity distribution:  Error = 2, Warning = 2, Information = 0


PS D:\Users\user01\Documents\WindowsPowerShell> Invoke-ScriptAnalyzer -Path .\Sample.ps1 -Fix

RuleName                            Severity     ScriptName Line  Message
--------                            --------     ---------- ----  -------
PSAvoidUsingComputerNameHardcoded   Error        Sample.ps1 8     The ComputerName parameter of cmdlet 'Enter-PSSession
                                                                  ' is hardcoded. This will expose sensitive informatio
                                                                  n about the system if the script is shared.
PSAvoidUsingConvertToSecureStringWi Error        Sample.ps1 6     File 'Sample.ps1' uses ConvertTo-SecureString with pl
thPlainText                                                       aintext. This will expose secure information. Encrypt
                                                                  ed standard strings should be used instead.


PS D:\Users\user01\Documents\WindowsPowerShell> Invoke-ScriptAnalyzer -Path .\Sample.ps1 -ReportSummary

RuleName                            Severity     ScriptName Line  Message
--------                            --------     ---------- ----  -------
PSAvoidUsingComputerNameHardcoded   Error        Sample.ps1 8     The ComputerName parameter of cmdlet 'Enter-PSSession
                                                                  ' is hardcoded. This will expose sensitive informatio
                                                                  n about the system if the script is shared.
PSAvoidUsingConvertToSecureStringWi Error        Sample.ps1 6     File 'Sample.ps1' uses ConvertTo-SecureString with pl
thPlainText                                                       aintext. This will expose secure information. Encrypt
                                                                  ed standard strings should be used instead.
2 rule violations found.    Severity distribution:  Error = 2, Warning = 0, Information = 0


PS D:\Users\user01\Documents\WindowsPowerShell>

修正前

20180619-001

修正後

20180619-002

今のところは単純な Alias の展開などのみですが、今後は適用できる範囲が広がるかもしれません。(もちろん、一意に解釈して修正できるものばかりではないですので限界はありますが、大規模なコードを修正しなければならない場合などはかなり工数を削減できるかと思います。)

インストール方法

最新の PowerShell (Core 6) を使用している場合は、PSScriptAnalyzer モジュールをインストールするだけで使用できます。

PS C:\> Get-PackageProvider

Name                     Version          DynamicOptions
----                     -------          --------------
NuGet                    2.8.5.210        Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag...
PowerShellGet            1.6.0.0          PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, ...


PS C:\> Install-Module -Scope CurrentUser -Name PSScriptAnalyzer

Nuget パッケージプロバイダーがインストールされていない場合(古い場合)は、先に Nuget をインストールしてください。

PS C:\> Install-PackageProvider Nuget -MinimumVersion 2.8.5.201 -Scope CurrentUser

Written by kazu

2018/06/19 at 23:00

カテゴリー: PowerShell

Tagged with ,

PowerShell 6.1.0 preview 3 がリリースされています

leave a comment »

タイトルの通りですが、PowerShell (Core) 6.1.0 preview 3 がリリースされています。

20180616-001

6.1.0 のリリースに向けて様々な改善とバグ修正が行われています。細かい変更点は上記リンクに記載されていますが、利用者としてハマりそうなところは以下の2点でしょうか。

  • UNIX 環境において、PowerShell Remoting を HTTP 上で利用する場合、基本認証(Basic Authentication)が利用できなくなりました。(Basic Authentication over HTTP は許可されなくなりました。)#6787
  • Function として実装されていた more が削除されました。今後は OS ネイティブの more コマンド、又は $env:PAGER で指定した PAGER を使用する方向になります。
  • help function は PAGER が指定されている場合には PAGER を、指定されていない場合には、more.com (Windows の場合)又は less (Windows 以外の場合)を使用するよう変更されています。
# Respect PAGER, use more on Windows, and use less on Linux
$moreCommand,$moreArgs = $env:PAGER -split '\s+'
if ($moreCommand) {
    $help | & $moreCommand $moreArgs
} elseif ($IsWindows) {
    $help | more.com
} else {
    $help | less
}

    Written by kazu

    2018/06/16 at 21:30

    カテゴリー: PowerShell

    Tagged with ,

    Windows Server Summit が開催されます

    leave a comment »

    2018/06/26 9:00 から(日本時間 2018/06/27 01:00 から)Windows Server Summit が開催されます。

    Hybrid, Security. Application Platform, Hyper-converged Infrastructure の4トラックでセッションが行われる予定です。

    2018/06/11 時点での Agenda は以下の通りです。

    Windows Server Summit (2018/06/27 JST)
    Time Hybrid Security HCI App Platform
    1:00 Keynote (Erin Chapple; Arpan Shah)
    1:45 Windows Server management reimagined
    2:45 Remote Desktop Services on-prem and on Azure Secure Virtualization: how to protect your virtualization fabric from insider threats From Hyper-V to Hyper-converged Infrastructure: HCI overview From Ops to DevOps
    Hybrid management with Azure security & management Helping customers elevate their security posture with Windows Server Hyper-converged Infrastructure what’s next: Storage Spaces Direct Modernizing your applications with containers
    Hyper-converged Infrastructure what’s next: Software-defined Networking The Windows Server and Kubernetes journey
    4:15 Q&A and closing (Jeff Woolsey; Samuel Li; Dean Wells; Cosmos Darwin; Taylor Brown)

    Written by kazu

    2018/06/13 at 08:30