WScriptは古く、ユニコードを適切に処理できないため、新しいShellLink interfaceを使用します。既存のlnkファイルのみを変更できるので、まずWScriptを使用して一時的に空のlnkを作成します。
function Create-Lnk(
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path -IsValid -Literal $_})]
[string]$lnk,
[Parameter(Mandatory=$true)]
[ValidateScript({Test-Path -Literal $_})]
[string]$target,
[string]$arguments = '',
[string]$description = '',
[string]$workingDir = '',
[ValidateSet('normal', 'minimized', 'maximized')]
[string]$windowState
) {
$tmpName = [IO.Path]::GetRandomFileName() + '.lnk'
$tmpFolder = $env:TEMP
$tmpFullPath = Join-Path $tmpFolder $tmpName
$ws_shell = New-Object -com WScript.Shell
$shortcut = $ws_shell.CreateShortcut($tmpFullPath)
$shortcut.Save()
$shellApp = New-Object -com Shell.Application
$shellLink = $shellApp.NameSpace($tmpFolder).ParseName($tmpName).GetLink()
$shellLink.Path = $target
$shellLink.Arguments = $arguments
$shellLink.Description = $description
$shellLink.WorkingDirectory = $workingDir
$shellLink.ShowCommand = switch($windowState){'minimized'{2} 'maximized'{3} default{1}}
$shellLink.Save()
move -literal $tmpFullPath $lnk -force
}
例:
Create-Lnk -lnk (Join-Path ([Environment]::GetFolderPath('Desktop')) 'пишижиши.lnk') `
-target 'D:\lost in translation\なんでやねん!.txt' `
-description '¿Por qué dices eso?'
はこれを参照してください。http://stackoverflow.com/questions/1056692/how-to-encode-unicode-character-codes-in-a-powershell-string-リテラル – Avshalom
今日でも、ファイル名に非ASCII文字を使用することを強くお勧めします。 – vonPryz
十億人の人々がASCII以外のファイル名を使用しているため、完璧です。この問題に関しては、あなたは恐竜の恐竜であるWScriptを使用しています。 Unicodeショートカットを作成するC#の例を参照してください。lnk:[Unicode文字でショートカットを作成](https://stackoverflow.com/a/13542488) – wOxxOm