ホストファイルをPowerShellスクリプトから解析します。hostsファイルの正規表現が異なる動作をします
私は別の行動を観察する:
セットアップ:
-match
を使用して$hostsFile = "$env:windir\System32\drivers\etc\hosts" $hostsRegex = '^\s*(?<Address>[0-9\.\:]+)\s+(?<Host>[\w\.\-]+)\s*$' $entries = Get-Content $hostsFile -Encoding Ascii
:
$entries -match $hostsRegex
それはすべて私のエントリ(および唯一の私の期待通りに動作し、出力エントリ)。何も私の目標は、カスタムPSを取得することです
...またMultiline
、SingleLine
、などのようなオプションを使用してみました(返されません
[Regex]::Matches($entries, $hostsRegex)
:.NET Regex.Matches
メソッドを使用して
実際に私はこれを動作させたい:
function Get-HostsEntries{
$hostsFile = "$env:windir\System32\drivers\etc\hosts"
$hostsRegex = '^\s*(?<Address>[0-9\.\:]+)\s+(?<Host>[\w\.\-]+)\s*$'
$entries = Get-Content $hostsFile -Encoding Ascii
[Regex]::Matches($entries, $hostsRegex) | %{
New-Object PSObject -Property @{
Address = $_.Groups["Address"].Value
Host = $_.Groups["Host"].Value
}
}
}
Get-HostsEntries
しかし何も返されません。
だから私の質問は以下のとおりです。
- なぜPowerShellとネット通話が同じように動作していないのですか?
- スクリプトを正常に動作させるにはどうすればいいですか?
'$ entries'は文字列の集合です。' Regex.Matches() 'は最初の引数として単一の文字列を取ります –