ন্যানো সার্ভারে পাওয়ারশেল দিয়ে একটি ফাইল ডাউনলোড করবেন?


9

ন্যানো সার্ভারের অধীনে পাওয়ারশেলের সাহায্যে কোনও ফাইল ঠিক কীভাবে ডাউনলোড করতে হবে তা নির্ধারণ করতে আমার কিছু উল্লেখযোগ্য সমস্যা হয়েছিল।

চ্যালেঞ্জটি নিম্নলিখিত:

  • কোনও ইনভোক-ওয়েবকোয়েস্ট নেই

  • কোনও সিস্টেম.নেট.ওয়েবক্লিয়েন্ট নেই

  • কোনও স্টার্ট-বিটস ট্রান্সফার নেই

  • বিটসাদমিন নেই

কেউ কীভাবে এটি (আপাতদৃষ্টিতে সহজ) কাজটি করতে জানেন?

উত্তর:


4

ন্যানোর উপর পাওয়ারশেল ব্যবহার করে একটি জিপ ফাইল ডাউনলোড করার উদাহরণ এখানে রয়েছে, আপনার প্রয়োজনে আপনাকে এটিকে কিছুটা সংশোধন করতে হতে পারে;

(এখান থেকে: https://docs.asp.net/en/latest/tutorials/nano-server.html#installing-the-asp-net-core-module-ancm )

$SourcePath = "https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-win-x64.latest.zip"
$DestinationPath = "C:\dotnet"

$EditionId = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'EditionID').EditionId

if (($EditionId -eq "ServerStandardNano") -or
    ($EditionId -eq "ServerDataCenterNano") -or
    ($EditionId -eq "NanoServer") -or
    ($EditionId -eq "ServerTuva")) {

    $TempPath = [System.IO.Path]::GetTempFileName()
    if (($SourcePath -as [System.URI]).AbsoluteURI -ne $null)
    {
        $handler = New-Object System.Net.Http.HttpClientHandler
        $client = New-Object System.Net.Http.HttpClient($handler)
        $client.Timeout = New-Object System.TimeSpan(0, 30, 0)
        $cancelTokenSource = [System.Threading.CancellationTokenSource]::new()
        $responseMsg = $client.GetAsync([System.Uri]::new($SourcePath), $cancelTokenSource.Token)
        $responseMsg.Wait()
        if (!$responseMsg.IsCanceled)
        {
            $response = $responseMsg.Result
            if ($response.IsSuccessStatusCode)
            {
                $downloadedFileStream = [System.IO.FileStream]::new($TempPath, [System.IO.FileMode]::Create, [System.IO.FileAccess]::Write)
                $copyStreamOp = $response.Content.CopyToAsync($downloadedFileStream)
                $copyStreamOp.Wait()
                $downloadedFileStream.Close()
                if ($copyStreamOp.Exception -ne $null)
                {
                    throw $copyStreamOp.Exception
                }
            }
        }
    }
    else
    {
        throw "Cannot copy from $SourcePath"
    }
    [System.IO.Compression.ZipFile]::ExtractToDirectory($TempPath, $DestinationPath)
    Remove-Item $TempPath
}

3
ধন্যবাদ! এটি যদিও এটির জন্য বেশ জটিল।
তবুও অন্য ব্যবহারকারী 23

1
উ: সমস্ত সেমিডলেটগুলি এখনও উপলভ্য নয়
জিম বি

4

Invoke-WebRequestউইন্ডোজ সার্ভার 2016 এর জন্য 26 সেপ্টেম্বর, 2016 এর সংশ্লেষিত আপডেটের অংশ হিসাবে ন্যানোসোভারে যুক্ত হয়েছিল ।


আমি বিশ্বাস করি যে আপনি যে পাওয়ারসেল কোড নমুনাগুলির কথা উল্লেখ করছেন সেটি বোঝানো হয়েছে ক্লায়েন্ট মেশিনে চালানো, ন্যানো ডকার হোস্ট নয় (এটি "যে রিমোট সিস্টেমে আপনি কাজ করবেন সেখানে ডকার ক্লায়েন্টটি ডাউনলোড করুন .: Invoke-WebRequest ...")
কিউবিক

আমি ভুল হতে পারি তবে আমি ধরে নিয়েছি @ এখনও-অন্য কোনও ব্যবহারকারী এটি নির্মাণের সময় ডকার ক্লায়েন্টের কাছ থেকে এটি ব্যবহার করতে চেয়েছিল wanted
মাইকব্রিজ

2

এটি ক্রেজি যে ক্লাউড ওয়ার্কলোডকে পাওয়ার জন্য ডিজাইন করা একটি সার্ভার ওএসের একটি সাধারণ রেস্ট / ওয়েব অনুরোধের জন্য অন্তর্নির্মিত সুবিধাজনক পদ্ধতি নেই: ও

যাইহোক, আপনি এই পাওয়ারশেল স্ক্রিপ্ট wget.ps1 চেষ্টা করতে পারেন যা মাইক্রোসফ্ট থেকে একটির একটি পরিবর্তন রয়েছে। সুবিধার জন্য এখানে অনুলিপি-আটকানো

<#
.SYNOPSIS
    Downloads a file
.DESCRIPTION
    Downloads a file
.PARAMETER Url
    URL to file/resource to download
.PARAMETER Filename
    file to save it as locally
.EXAMPLE
    C:\PS> .\wget.ps1 https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
#>

Param(
  [Parameter(Position=0,mandatory=$true)]
  [string]$Url,
  [string]$Filename = ''
)

# Get filename
if (!$Filename) {
    $Filename = [System.IO.Path]::GetFileName($Url)    
}

Write-Host "Download: $Url to $Filename"

# Make absolute local path
if (![System.IO.Path]::IsPathRooted($Filename)) {
    $FilePath = Join-Path (Get-Item -Path ".\" -Verbose).FullName $Filename
}

if (($Url -as [System.URI]).AbsoluteURI -ne $null)
{
    # Download the bits
    $handler = New-Object System.Net.Http.HttpClientHandler
    $client = New-Object System.Net.Http.HttpClient($handler)
    $client.Timeout = New-Object System.TimeSpan(0, 30, 0)
    $cancelTokenSource = [System.Threading.CancellationTokenSource]::new()
    $responseMsg = $client.GetAsync([System.Uri]::new($Url), $cancelTokenSource.Token)
    $responseMsg.Wait()
    if (!$responseMsg.IsCanceled)
    {
        $response = $responseMsg.Result
        if ($response.IsSuccessStatusCode)
        {
            $downloadedFileStream = [System.IO.FileStream]::new($FilePath, [System.IO.FileMode]::Create, [System.IO.FileAccess]::Write)

            $copyStreamOp = $response.Content.CopyToAsync($downloadedFileStream)
            # TODO: Progress bar? Total size?
            Write-Host "Downloading ..."
            $copyStreamOp.Wait()

            $downloadedFileStream.Close()
            if ($copyStreamOp.Exception -ne $null)
            {
                throw $copyStreamOp.Exception
            }
        }
    }
}
else
{
    throw "Cannot download from $Url"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.