এসকিউএল এজেন্ট পাওয়ারশেল প্রসঙ্গ রেফারেন্স


13

আমার নতুন চাকরিতে, প্রতিটি সার্ভারে আমাদের একাধিক নামকরণ রয়েছে। যেমন

  • Server1 \ দেব
  • Server1 \ DevIntegrated
  • Server1 \ QA তে

আমার সেই কার্যগুলিতে একটি এসকিউএল পাওয়ারশেল স্ক্রিপ্ট রয়েছে যা ওএসগুলিতে কল করে, অনুরোধ করে Foo.exeতবে একটি কমান্ড লাইন প্যারামিটার (সংযোগের স্ট্রিং) পাস করতে হবে। প্রতিটি উদাহরণে একটি এসকিউএল এজেন্ট কাজ বিদ্যমান থাকবে, টাইপ পাওয়ারশেলের ধাপের সাথে, বর্তমান প্রসঙ্গটি কী তা জানতে হবে। অর্থাত্ এই মৃত্যুদন্ডটি ডিভ ইন্টিগ্রেটেড থেকে শুরু হয়েছিল।

আমার প্রতিটি স্ক্রিপ্ট দিয়ে শুরু করার ইচ্ছা নেই ...

$thisInstance = "Dev"

... বিশেষত যেহেতু আমাকে এডিট করতে হবে যখন আমরা আসন্ন মাসগুলিতে পরিবেশে (নতুন সার্ভার এবং নামযুক্ত উদাহরণগুলি) স্থানান্তর করি।

যদি আমি এসকিউএলপিএস শুরু করি, তবে আমি গেট-লোকেশন বা চলমান ফলাফলগুলি কাটা এবং ডাইস করে আমার উদাহরণটি নির্ধারণ করতে পারি

(Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName

যখন এসকিউএল এজেন্ট পাওয়ারশেল টাইপের কাজ শুরু করে, তখন এটি সি: \ উইন্ডোজ \ Get-Locationসিস্টেম 32 এ শুরু হয় এবং এসকিউএলসিভারের প্রসঙ্গে নয় বলে রুটটি কাজ করে না। আমি সেই প্রসঙ্গে পরিবর্তন করতে পারি তবে আমি এসকিউএল সার্ভারের "রুট" এ থাকব এবং আমার কোন দৃষ্টান্তটি থাকতে হবে তা জানব না the Invoke-Sqlcmdরুটটি ব্যবহার করা একই কারণে হয় না (প্রযুক্তিগতভাবে, এটি সেখানে সময় হিসাবে বেরিয়ে আসে) কোনও ডিফল্ট উদাহরণ নয়)

আমার জ্ঞানের সর্বোপরি, আমি সমস্ত বুনিয়াদি "জিনিস" গণনা করেছি যে আমি চাকরিতে লগতে পারি তবে কিছুই দেখায় বলে মনে হয় না SQLSERVER:\SQL\Server1\DevIntegrated

Get-Processদেখে মনে হচ্ছে যে আমি এটি ব্যবহার করতে পারি এবং উদাহরণস্বরূপ এবং স্পিডগুলির সাথে মিল রেখে জিনিসগুলিকে একসাথে আবদ্ধ করার চেষ্টা করছিলাম তবে এটি কেবল নরক থেকে রক্তাক্ত-হ্যাকের মতো শোনাচ্ছে। এখানে কিছু বেসিক অবশ্যই থাকতে হবে যা আমি মিস করছি, কেউ কি কিছুটা আলোকপাত করতে পারে?

পাওয়ারশেলের বিকল্পগুলি তদন্ত করা হয়েছে

আমি অন্যান্য কাজের ধরণগুলি ব্যবহার করে তদন্ত করেছি এবং সন্তোষজনক রেজোলিউশন পাইনি। গবেষণা নির্দেশ করে যে এসকিউএল এজেন্টের অধীনে থাকা পাওয়ারশেলটি এসকিউএলপিএস ছিল এবং এজেন্টের ডান ক্লিক করে এটির একটি সূচনা শুরু করে স্বয়ংক্রিয়ভাবে আমাকে সঠিক জায়গায় ফেলেছে dropped আমি যখন আমার ইন্টারেক্টিভ কোডটি চাকরীর পদক্ষেপে আটকালাম তখনই আমি আগে বর্ণিত পার্থক্যটি শিখেছি।

কাজের ধরণের ওএস আমাকে একটি অভিন্ন অবস্থায় ফেলেছে যে কোন উদাহরণটি কমান্ড শেলটিতে ফেলেছে তা নির্ধারণের জন্য আমি কোনও উপায় খুঁজে পাচ্ছি না। অবশ্যই, আমি sqlcmd করতে পারি এবং এর মান পেতে @@servernameপারি তবে আমি যদি sqlcmd শুরু করার জন্য কী সংযোগটি জানতাম তবে আমার ডাটাবেসটি জিজ্ঞাসা করার প্রয়োজন হবে না;)

টিএসকিউএল সম্ভবত সক্ষম হয়ে থাকলে কাজ করতে পারে xp_cmdshellতবে আমি নিশ্চিত না যে সেগুলি --- সরকারি সুবিধা চালু আছে কিনা এবং তারা অ-ডিফল্ট সেটিংসে স্থির থাকতে পারে। তারপরেও, আমি গতিশীল এসকিউএল দিয়ে ফিউটিংয়ে আটকে আছি এবং পাওয়ারশেল যে .ণ দেয় তা প্রকাশ এবং শক্তি হারিয়ে ফেলছে।

কিছুটা কুরুচিপূর্ণ অবস্থায়, আমি ভেবেছিলাম প্রথম ধাপে একটি পরিবর্তনশীল সংজ্ঞায়িত করে উত্তরসূরী পদক্ষেপগুলিতে প্রেরণ করব তবে গবেষণাটি নিবন্ধটি একাধিক কাজের পদক্ষেপগুলি পরিচালনা করেছে (বিওএল)

কাজের পদক্ষেপগুলি স্ব-অন্তর্ভুক্ত থাকতে হবে। যে, একটি কাজ কাজের পদক্ষেপের মধ্যে বুলিয়ান মান, তথ্য বা সংখ্যাসূচক মান পাস করতে পারে না। আপনি তবে স্থায়ী টেবিল বা গ্লোবাল অস্থায়ী সারণী ব্যবহার করে একটি ট্রান্সঅ্যাক্ট-এসকিউএল কাজের পদক্ষেপ থেকে অন্যটিতে পাস করতে পারেন। আপনি চাকরীর পদক্ষেপগুলি থেকে মানগুলি পাস করতে পারেন যা ফাইলগুলি ব্যবহার করে এক কাজের পদক্ষেপ থেকে অন্য কাজের ধাপে এক্সিকিউটেবল প্রোগ্রামগুলি চালায়।

আমি একটি সুপরিচিত ফাইল / পরিবেশের ভেরিয়েবল / রেজিস্ট্রি সেটিং এর মতো সাধারণ কৌশলগুলি ব্যবহার করতে পারি না Foo.exeকারণ এটি উদাহরণস্বরূপ একযোগে কার্যকর হওয়া আটকাবে।

টি এল; ডিআর:

PowerShell প্রকারের একটি এসকিউএল এজেন্ট কাজের পদক্ষেপে, আপনি কীভাবে এসকিউএল সার্ভারের প্রসেসটি চালু করেছিলেন তা নির্ধারণ করতে পারবেন?


4
আপনি যা করছেন তার জন্য পাওয়ারশেল কি কোনও প্রয়োজনীয়তা রয়েছে?
jhndacostaa

আসল প্রয়োজনীয়তাটি হবে এসকিউএল এজেন্টে একটি পুনঃব্যবহারযোগ্য "কিছু" থাকা যা চালিত দৃষ্টান্তটির পরামিতি সহ ডস প্রক্রিয়া চালু করতে পারে। পাওয়ারশেল উপরের কাজ না করে দেওয়া সবচেয়ে ভাল ফিট বলে মনে হয়েছিল। ক্ষুদ্র প্রতিক্রিয়ার জন্য দুঃখিত, আমি স্কাউট শিবিরে বাইরে ছিলাম।
বিলিংক

উত্তর:


9

আপনি যদি এসকিউএল সার্ভার বিএল-তে সন্ধান করেন, এসকিউএল সার্ভার এজেন্ট "টোকেন" এর একটি সেট সরবরাহ করে যা এটি কাজের ধাপ কমান্ড পাঠ্য এবং আউটপুট ফাইল উভয়কে প্রতিস্থাপন করবে (পরবর্তীকালে জিইউআই "ভিউ" বোতামটি কাজ করা থেকে বিরত থাকবে)। এই টোকেনগুলি টি-এসকিউএল ব্যতীত যে কোনও ধরণের পদক্ষেপের জন্য কাজ করছে বলে মনে হচ্ছে।

https://docs.microsoft.com/en-us/sql/ssms/agent/use-tokens-in-job-steps#sql-server-agent-tokens

সুতরাং, আপনার যদি একটি এসকিউএল 2008 পাওয়ারশেল পদক্ষেপ থাকে তবে আপনি এটি দিয়ে এটি শুরু করতে পারেন:

$sqlInstance = "$(ESCAPE_DQUOTE(SRVR))"

পরিবর্তে আপনার MACH(মেশিনের নাম) এবং INST(কেবল উদাহরণের নাম) ব্যবহারের প্রয়োজন হতে পারে , কারণ ডিফল্ট উদাহরণ সহ SRVR == MACH, তবে নামকরণের উদাহরণগুলির সাথে SRVR == MACH\INST


3

দুঃখের সাথে বলতে হয় যে এসকিউএল সার্ভারের ভিতরে পাওয়ারশেল স্ক্রিপ্টগুলি কল করার সাথে আমি খুব বেশি কিছু করি নি। বা আমি এমন কম্পিউটারে নেই যা আমি এখনই এটির সাথে খেলতে পারি।

আমি বিশ্বাস করি যদিও পাওয়ারশেল টাইপ পদক্ষেপটি ব্যবহার করার পরিবর্তে আপনি যদি CmdExec ব্যবহার করেন এবং আপনার স্ক্রিপ্টটি কেবল একটি কমান্ড লাইন "পাওয়ারশেল 'MyScript.ps1'" থেকে কল করে থাকেন তবে আপনি যে প্যারামিটারটি চালাচ্ছেন তার উদাহরণ থাকতে পারে। "পাওয়ারশেল 'মাইস্ক্রিপ্ট.পিএস 1' মাইআইন্সটেন্সনাম 'পছন্দ করুন।

সুতরাং আপনার স্ক্রিপ্টের শুরুতে MyInstanceName এর মানটি গ্রহণ করার জন্য আপনার একটি পরম () সেটআপ রয়েছে:


param(
   [Parameter(Position=0,Mandatory=$True)]
   [string]$InstanceName
)
#so if I wanted to use sqlcmd
sqlcmd -S $InstanceName -Q "SELECT @@VERSION"

আপনি যে পদক্ষেপটি জানাচ্ছেন তা কী ছিল তা জানার জন্য একটি পদক্ষেপের কথা বলা শুরু করার সাথে সাথে পাওয়ারশেল স্ক্রিপ্ট Foo.exe কে সঠিকভাবে কল করতে পারে। যাইহোক, পরে আপনি মানটি অন্যান্য পদক্ষেপে পাস করতে সক্ষম হবেন বলে উল্লেখ করেছেন। যদি এটি সত্য হয় তবে আপনি একটি ছোট এসএসআইএস প্যাকেজ তৈরি করতে চাইতে পারেন যা আপনার পাওয়ারশেল স্ক্রিপ্টকে কল করে এবং আপনার যা যা প্রয়োজন তা করতে পারে। এসএসআইএসের সাহায্যে আপনি একটি বিশ্বব্যাপী পরিবর্তনশীল সেটআপ করতে সক্ষম হতে পারেন যা পুরো প্যাকেজটি ব্যবহার করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.